还有哪些其他IoC容器具有IInitializable类似功能?

我在之前的项目中一直使用Castle Windsor,我非常喜欢它。 对于我目前的项目,我正在寻找使用不同的IoC容器。 温莎城堡自2007年以来还没有任何新的发布,但仍然不在1.0版本,所以很难在商业环境中使用它。

我喜欢关于Castle Windsor的一件事是,只需简单地通过使服务实现IInitializable设置所有依赖关系,就可以让容器在您的服务上调用Initialize方法。 我用了很多。 它可以很容易地执行属性注入而不是构造函数注入,并且清理代码并进行相当多的测试。

我一直在寻找StructureMap,AutoFac,Unity和Spring.Net作为替代品,但只有Spring.Net支持类似的东西,它会自动调用Init()方法。 不幸的是,Spring.Net并不真正支持我想要使用IoC容器的方式(它基于字符串键而不是接口声明注入,因此其自动装配支持也受到限制)

我看到过IoC容器中的类似功能吗? 我的IoC容器工作方式错了吗? 还是有其他IoC容器支持像IInitializable或Init()?


Autofac可以做到 - 他们称之为可启动


有了StructureMap,你可以做这样的事情:

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

它不像在你的类上实现一个'Initialisation'接口那么简单,但它也意味着你不需要通过继承DI容器特定的接口来将你的类实现与你选择的DI容器绑定(尽管我不确定实际上有多少问题)。

我相信构造函数注入现在已经非常普遍了,而且对于无法使DI容器为您执行对象构造(例如ASP.NET webforms)的情况,属性注入被广泛认为是一种退步。 虽然我可能错了,但这只是我对这个主题的看法!

你真的认为属性注入“清理代码并进行相当多的测试”吗? 这很有趣,因为我认为相反 - 我认为构造函数注入是'更清晰',我猜测这可能只是因为我通常这样做,所以这就是我习惯的。 :)


Castle在一段时间内可能没有任何发布,但仍在积极开发之中。 你可以在这里获得最新的(相当稳定的)构建。

还有很快就会有一个正式的v2.0版本。 如果你知道这很好,为什么不使用你已经知道的?

链接地址: http://www.djcxy.com/p/82137.html

上一篇: What other IoC containers have an IInitializable like feature?

下一篇: ASP.NET MVC + fluent nNibernate, what IoC tool?