6

当我在我正在进行的项目中对Ninject进行拍摄时,我最近碰到了一堵砖墙。静态依赖注入工厂,对还是错?

我已经经历了各种各样的问题,系统地提出了我的设计和架构以支持依赖注入。

  1. Is this right to inject the container/kernel to the main application presenter?

  2. How to configure Ninject to use along with NHibernate in WinForms?

  3. Conditional dependency injection binding only when property not null

  4. What did I get wrong, DI or Design, and how should I go about it?

小时后,和小时,海小时在我看来,这篇文章来自Justin Etheredge,他讲述了他的静态DIFactory课程。

我现在不知道,是不是使用静态DI工厂做事情的工作像变魔术?

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

另外,IoC和DI是否相同,还是非常相似,但有些区别?

回答

7

一个static DI Factory is a Service LocatorService Locator is an anti-pattern,因为它将使困难的原因有关您的代码

服务定位器的唯一好处是,它是稍微easier to understand than Dependency Injection。但是,DI并不难于掌握once you get over a few conceptual hurdles

IoC和DI之间的关系是DI is a special case of IoC

+0

如果某些类型无法在应用程序启动时实例化,那么该怎么办?因为它们需要用户凭证才能正确实例化?例如,'NHibernante.ISessionFactory'就是这样的问题,因为它不能在没有正确的连接字符串的情况下实例化,并且一旦创建,它就不会让连接字符串改变。作为一种解决方法,可以提供'IDbConnection',并丢失在整个ISession生命周期中保存对象踪迹的二级缓存。然后需要用户提供他的证书,现在'ISessionFactory'依赖不再是一个问题。 –

+0

它会是一个'AbstractFactory',它可以让新的类型被注册?你会怎么做呢? –

+1

如果在运行时无法解析子图,则始终可以添加另一个间接层。抽象工厂将是一种选择。这里有更多关于[实现抽象工厂]的信息(http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory)。 –