关于依赖注入:其他哪些IoC容器具有类似IInitializable的功能?

What other IoC containers have an IInitializable like feature?

我在以前的项目中使用过温莎城堡,我非常喜欢它。对于我目前的项目,我希望使用不同的IOC容器。自2007年以来,Castle Windsor还没有发布过任何新版本,目前还没有1.0版,因此很难证明在商业环境中使用它的合理性。

我喜欢Castle Windsor的一个特点是,通过使服务实现IInitializable,在设置了所有依赖项之后,可以让容器对服务调用一个初始化方法。我经常用这个。它使得进行属性注入(而不是构造函数注入)变得容易,并且可以清理代码并进行相当多的测试。

我一直把structuremap、autofac、unity和spring.net作为替代方案,但其中只有spring.net支持类似的东西,它会自动调用Init()方法。不幸的是,spring.net并不真正支持我使用ioc容器的方式(它是基于字符串键而不是接口声明进行注入的,因此它的自动连接支持也受到限制)

我是否错过了我所看到的IOC容器中的类似功能?我使用IOC容器的方式有问题吗?或者是否有其他IOC容器确实支持IInitializable或init()之类的内容?


自动空调可以做到-他们称之为可启动


国际奥委会得到了它——它被称为初始化。你可以在这里找到它:github.com/philipraureano/linfu


城堡可能在一段时间内没有任何释放,但它仍在积极发展。你可以在这里得到最新的(相当稳定的)版本。

很快还会有一个正式的2.0版本发布。如果你知道它是好的,为什么不使用你已经知道的呢?


使用structuremap,您可以这样做:

1
2
3
ForRequestedType<IFoo>()
  .TheDefaultIsConcreteType<Foo>()
  .OnCreation(x => x.Init());

这不像在类上实现"初始化"接口那么简单,但也意味着您不需要通过继承特定于DI容器的接口(尽管我不确定实际存在的问题有多严重),将类实现与您对DI容器的选择联系起来。

我相信构造函数注入现在已经被广泛使用了,对于那些无法让DI容器为您执行对象构造(例如ASP.NET WebForms)的情况,属性注入被广泛认为是一种回退。但我可能错了,这只是我对这个问题的看法!

您真的认为属性注入"清理了代码并进行了相当多的测试"吗?这很有意思,因为我认为恰恰相反,我认为构造器注入是"更干净的",我猜测这可能只是因为我通常是这样做的,所以我习惯了这一点。:)