【发布时间】:2010-10-20 14:39:59
【问题描述】:
我在之前的项目中一直在使用 Castle Windsor,我非常喜欢它。对于我当前的项目,我希望使用不同的 IoC 容器。 Castle Windsor 自 2007 年以来没有发布任何新版本,并且还没有发布 1.0 版,因此很难证明在商业环境中使用它是合理的。
我喜欢 Castle Windsor 的一件事是,在设置了所有依赖项之后,您可以让容器在服务上调用 Initialize 方法,只需让服务实现 IInitializable。我经常使用这个。它使进行属性注入而不是构造函数注入变得容易,并且可以清理代码和进行大量测试。
我一直在寻找 StructureMap、AutoFac、Unity 和 Spring.Net 作为替代方案,但其中只有 Spring.Net 支持类似的东西,它会自动调用 Init() 方法。不幸的是,Spring.Net 并不真正支持我想要使用 IoC 容器的方式(它基于字符串键而不是接口声明进行注入,因此它的自动装配支持也受到限制)
我是否错过了我查看的 IoC 容器中的类似功能?我使用 IoC 容器的方式是否有问题?或者是否有其他 IoC 容器支持 IInitializable 或 Init() 之类的东西?
【问题讨论】:
-
Castle 鼓励您从主干构建自己的版本,这就是为什么有一段时间没有发布了
-
另外,我从 Castle 切换到 Autofac 并且从未回头
-
Autofac 现在似乎是一个不错的选择。我一直在为自己的爱好项目从后备箱构建,因为这是获得流利注册内容的唯一方法。但对于专业工作,我想要一个经过良好测试的版本。
-
Autofac 的官方版本自 2007 年以来就具有流畅的语法 - 不知道您的意思:)
-
关于 Spring 注入的评论:您可以在对象元素上添加一个 autowire="byType" 作为属性以按类型自动装配...
标签: dependency-injection inversion-of-control ioc-container object-lifetime