比较Castle Windsor,Unity和StructureMap

Qui*_*Par 51 structuremap dependency-injection castle-windsor ioc-container unity-container

在跟进基耶斯洛夫的说法温莎确实比其他国际奥委会的多很多,我想了解这些国际奥委会如何叠起来反对对方,这温莎城堡带来的好处/附加设施.

有比较吗?有人可以帮助我理解Castle Windsor提供的其他IoC附加功能

Mau*_*fer 48

请看这里这里对几个IoC容器进行非常彻底的技术比较,虽然现在已经过时了(它们来自Windsor 2.0之前)

但是,我不认为Windsor提供的任何重要功能和其他容器没有.Windsor,StructureMap,Spring.NET已经存在了好几年,并且这些年来已经在许多项目中使用过,所以它们现在非常成熟.较新的容器,如Autofac,Unity,NinjectSimpleInjector都是基于之前的体验,因此它们也不会缺少这些重要功能.

现在答案中更主观的部分:我喜欢认为Windsor具有可用性,可扩展性和集成模块的良好组合.

可用性:例如,您可以使用XML和/或代码注册(它现在也像大多数容器一样具有流畅的API).

可扩展性:您可以使用许多扩展点来自定义或覆盖几乎任何默认行为.

集成:Windsor拥有许多设施(模块),可以轻松与其他框架/库集成.其他集成包括ASP.NET MVC,MonoRail,Workflow Foundation,NServiceBus,MassTransit,Rhino Service Bus,Quartz.Net,SolrNet,SolrSharp,Windows传真服务.

这一系列文章涵盖了温莎的许多细节和延伸点.

请注意,我并不是说其他容器不提供类似的东西!即使您选择了其中一个,后来您发现它缺少一些集成,通常也不难自己编写代码.

结论:只要您正确构建代码(例如,避免服务定位器反模式),我认为任何主要的IoC容器都不会出错.

  • 是的,我试过了.我希望你有一个特定的链接.我认为这是最好的解释:http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx (8认同)

Krz*_*mic 19

对我来说,温莎有两个杀手锏,我不相信大多数其他容器.

  • 能够以容器无关的方式工作 - 这意味着您的容器可以为您引导所有代码,并且您可以充分利用其丰富的功能,而无需在非基础架构程序集中引用任何Castle.*.dll程序集.这要归功于Lazy Component Loaders,DynamicParameters和Typed Factory Facility等功能,这些功能不会限制您利用容器的高级功能,同时避免手动编码集成层,或使用Service Locator,正如@ploeh所写的那样反模式.

  • 非常丰富的可扩展性/扩展生态系统,可以为您提供真正强大的功能,并大大减少您必须编写的管道代码量.这可能听起来不是很强大,但是一旦你在一个项目中利用WCF Facility之类的东西,你欣赏它,然后在另一个项目中你将无法使用它.可扩展性部分意味着虽然Windsor没有尝试(这是它的设计目标)来解决您开箱即用的每个问题,但它是非常可扩展的,这意味着您可以调整和扭曲它以完成您可能需要的几乎任何事情.

除此之外,我恰好喜欢温莎的工作方式与预期相当(与其他一些容器相反)以及它如何解决小事.例如,创建装饰服务非常简单.我也非常喜欢它的流畅注册API,这对于两种简单的场景都非常有效,并且当你想要做一些先进的事情时,它不会变得过于扭曲和复杂.还有很多其他的小东西,虽然这里的东西可能非常主观.