静态依赖注入工厂,对还是错?

5

最近我在项目中尝试使用Ninject时遇到了难题。

我经过各种问题的反复探讨,逐步优化我的设计和架构,以支持依赖注入。

  1. 将容器/内核注入到主应用程序Presenter是否正确?

  2. 如何配置Ninject与WinForms一起使用NHibernate?

  3. 仅在属性不为空时进行有条件的依赖项注入绑定

  4. 我是哪里出了问题,是DI还是设计,我该怎么做?

经过数小时的搜索,我发现了Justin Etheredge的文章,其中提到了他的静态DIFactory类。

我现在想知道,使用静态DI工厂是否不像魔法一样让事情变得简单?

我想听听在实际应用中使用静态DI工厂的优缺点。

此外,IoC和DI是相同的吗,还是它们非常相似,尽管有些差异?

1个回答

7

静态 DI 工厂是服务定位器, 而服务定位器是一种反模式,因为它会使你的代码难以理解

Service Locator 的唯一优点是它比依赖注入稍微容易理解一些。然而,一旦你克服了一些概念上的障碍,DI 并不那么难以理解。
IoC 和 DI 之间的关系是 DI 是 IoC 的一个特例。

如果某些类型在应用程序启动时无法实例化,因为它们需要用户凭据才能正确实例化怎么办?例如,NHibernante.ISessionFactory 就存在这样的问题,因为它没有适当的连接字符串就无法实例化,并且一旦创建,就无法更改其连接字符串。作为解决方法,可以提供一个 IDbConnection,但会失去持有对象跟踪信息的第二级缓存,该信息贯穿整个 ISession 生命周期。然后,需要用户提供凭据,现在 ISessionFactory 依赖关系不再是问题。 - Will Marcouiller
这个问题是否可以使用“抽象工厂”来注册新类型?你会如何处理? - Will Marcouiller
1
如果在运行时无法解析子图,您可以始终添加另一层间接引用。抽象工厂将是一个选项。这里有关于实现抽象工厂的更多信息。 - Mark Seemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接