我有一个非常简单的场景可以使用 DI 解决,但我无法找到合适的示例/文档来帮助我完成。我是Scala/Guice世界的新手。
当前组件看起来像这样
trait Foo {
}
class FooImpl extends A {
}
trait Bar {
val description: String
}
class BarImpl(val description: String) extends Bar {
}
现在,我在Foo和Bar之间有一个依赖项。所以,通常代码看起来像这样
class FooImpl extends Foo {
Bar bar = createBar("Random Bar Value!")
}
其中createBar("Bar!")
只是返回new BarImpl("随机条形图值")
。当然,为了简洁起见,我删除了工厂/助手。
我意识到,当我使用“new”时,这已经脱离了DI范式。我希望确保可以基于参数将Bar注入FooImpl。有点像使用工厂。我们如何在Scala/Guice世界中使用DI。
我看了一下AssistedInjection/Named Parameters,但我无法理解用法最终会是什么样子。我认为这是最好的方法,但无法理解应该如何编写/测试它。
好吧,这就是我最后的工作。为任何想处理基于Scala的辅助注入的人重写这些步骤。
Foo可能需要Bar,但真正需要注入的是BarFactory,而不是Bar。
需要创建一个BarFactory,但是实现可以留给Guice。这就是棘手的地方。
trait BarFactory {
def create(msg:String):Bar
}
因此,让我们重新审视Foo和Bar:
@ImplementedBy(classOf[FooImpl])
trait Foo {
def getBar(msg: String): Bar
}
class FooImpl @Inject() (barFactory: BarFactory) extends Foo {
override def getBar(msg: String): Bar = {
barFactory.create(msg)
}
}
@ImplementedBy(classOf[BarImpl])
trait Bar {
def echo() : String
}
//Note that we use the @Assisted Annotation Here.
class BarImpl @Inject() (@Assisted msg: String) extends Bar {
override def echo(): String = msg
}
创建实际工厂是作为模块的一部分完成的
class TempModule extends AbstractModule {
override def configure(): Unit = {
install(new FactoryModuleBuilder()
.implement(classOf[Bar], classOf[BarImpl])
.build(classOf[BarFactory]))
}
}
一旦开始,工厂实现将由Guice提供,您应该能够使用工厂创建自己的实际实现。
在应用中,您希望使用不同的类来处理不同的任务以保持代码的简洁。我们把这些类称为 依赖。如何将这些依赖关系传递给将在后台任务调用的方法呢? 当您在后台任务中调用静态方法时,仅限于应用程序的静态上下文,这需要您使用以下获取依赖关系的模式: 通过 new 手动实例化依赖 服务定位器模式 抽象工厂模式 或 建设者模式 单例模式 然而,所有这些模式使您的应用程序的单元可测试性方面变得非常复杂。为了解决这个问
本文向大家介绍DBMS中的传递依赖,包括了DBMS中的传递依赖的使用技巧和注意事项,需要的朋友参考一下 什么是传递依存关系 当间接关系引起功能依赖性时,称为传递依赖性。 如果P-> Q且Q-> R为真,则P-> R为传递依赖。 要实现3NF,请消除传递依赖性。 示例 <电影列表> Movie_ID Listing_ID Listing_Type DVD_价格($) M08 L09 犯罪 180 M
主要内容:依赖传递,依赖范围,依赖范围对传递依赖的影响,依赖调节Maven 依赖传递是 Maven 的核心机制之一,它能够一定程度上简化 Maven 的依赖配置。本节我们将详细介绍依赖传递及其相关概念。 依赖传递 如下图所示,项目 A 依赖于项目 B,B 又依赖于项目 C,此时 B 是 A 的直接依赖,C 是 A 的间接依赖。 Maven 的依赖传递机制是指:不管 Maven 项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Mav
问题内容: 我正在处理一个表,该表具有一个复合主键,该主键由1NF形式的两个属性(总共10个)组成。 在我的情况下,全功能的依赖项涉及依赖项, 这 依赖于我的主键中的 两个 属性。 部分依赖项依赖于主键中的任一属性。 传递依赖关系涉及功能依赖关系中的两个或多个非关键属性,其中一个非关键属性依赖于我的主键中的某个关键属性。 将可传递的依赖关系从表中拉出,似乎 在 规范化 之后 执行了此操作,但是我的
我正在从一个使用Android-Maven-Plugin的Maven项目中构建一个Android应用程序。在这个项目中,我使用了新的beta版数据绑定库。 它包含在Android SDK的本地m2repository中(extras/Android/m2repository)。这个存储库中的库打包为AAR类型。 附注:对于我自己的本地构建,我有几个解决方案(例如重新打包为jar),但我更喜欢一个更
我试图在注释中创建一些信息树结构。经过一些尝试和帮助(请参阅java注释中的类型层次结构),我转向了以下模型。 该节点应允许我定义一级条件树。LogicalPression中的值定义子节点(属性和其他节点)之间的关系。问题是注释不允许递归依赖: 即使我在Node和NodeList包含节点列表中添加了一些NodeList注释,循环依赖也会再次被识别。 循环注释定义有什么解决方案吗?