在Krzysztof的声明后续中,他提到Windsor比其他IoC做得更多,我想了解这些IoC之间的差异以及Castle Windsor提供的好处/额外设施。
是否有任何比较?有人可以帮助我理解Castle Windsor相对于其他IoC提供的附加功能吗?
在Krzysztof的声明后续中,他提到Windsor比其他IoC做得更多,我想了解这些IoC之间的差异以及Castle Windsor提供的好处/额外设施。
是否有任何比较?有人可以帮助我理解Castle Windsor相对于其他IoC提供的附加功能吗?
请参考此处和此处,了解几个IoC容器的相当详细的技术比较(虽然这些比较有点过时了,因为它们在 Windsor 2.0 之前)。
然而,我不认为 Windsor 提供了其他容器没有的真正的重要功能。Windsor、StructureMap、Spring.NET已经存在多年,在这些年中被用于许多项目,因此它们现在非常成熟。像Autofac、Unity、Ninject和SimpleInjector这样的新容器都建立在以前的经验基础上,因此它们也不会缺少那些重要的功能。
现在是回答中更主观的部分:我认为 Windsor 具有良好的可用性、可扩展性和集成模块的混合特性。
可用性:例如,您可以使用 XML 和/或代码注册(它也像大多数容器一样拥有流畅 API)。
可扩展性:许多扩展点,您可以使用它们来自定义或覆盖几乎任何默认行为。
集成: Windsor有许多设施(模块),可轻松集成其他框架/库。其他集成包括ASP.NET MVC、MonoRail、Workflow Foundation、NServiceBus、MassTransit、Rhino Service Bus、Quartz.Net、SolrNet、SolrSharp、Windows传真服务。
这系列文章涵盖了Windsor的许多细节和扩展点。
请注意,我并不是说其他容器没有提供类似的功能!即使你选择了其中一个,后来发现它缺少一些集成功能,通常也不难自己编写代码实现。
底线:只要您正确地组织您的代码(例如,避免使用服务定位器反模式),我认为您可以选择任何主要的IoC容器而不会出错。
在容器无关的方式下工作的能力-这意味着您的容器可以为您引导所有代码,并且您可以充分利用其丰富的功能,而不必在非基础设施程序集中引用任何Castle.*.dll程序集。这要归功于一些功能,例如惰性组件加载器、DynamicParameters和Typed Factory Facility,它们不会限制您利用容器的高级功能,同时避免手动编写集成层,或使用Service Locator,如@ploeh所写,这是一种反模式。
非常丰富的可扩展性/扩展生态系统,可以为您提供非常强大的功能,并极大地减少您需要编写的管道代码量。这可能听起来不太强大,但是一旦您利用像在一个项目中使用WCF Facility,然后在另一个项目中您将无法使用它时,您就会感激它。 可扩展性部分意味着,虽然Windsor不试图(这是其设计目标)在出厂时解决您可能遇到的每个问题,但它非常可扩展,这意味着您可以调整和扭曲它以执行几乎任何您可能需要的操作。