比较温莎城堡、Unity 和 StructureMap

Posted

技术标签:

【中文标题】比较温莎城堡、Unity 和 StructureMap【英文标题】:Comparing Castle Windsor, Unity and StructureMap 【发布时间】:2011-01-14 01:44:56 【问题描述】:

在跟进Krzysztof’s statementWindsor 比其他 IoC 做得更多时,我想了解这些 IoC 如何相互叠加,以及温莎城堡提供的好处/额外设施。

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

【问题讨论】:

是的,Mark Seemann 的书“.NET 中的依赖注入”amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501/… 确实显示了一个比较多个 IOC 容器的图表,并且它似乎具有“最多”的功能。我和我认识的其他开发人员根本不喜欢使用它。我不喜欢 VB.NET,而有些人喜欢(而且我绝不会将 Castle Windsor 与 VB.NET 进行比较......) 【参考方案1】:

请参阅 here 和 here 对几个 IoC 容器进行相当彻底的技术比较,尽管现在有些过时(它们来自 Windsor 2.0 之前的版本)

但是,我认为 Windsor 并没有真正提供任何 重要 功能,而其他容器则没有。 Windsor, StructureMap, Spring.NET 已经存在好几年了,这些年来已经在很多项目中使用了,所以它们现在非常成熟。较新的容器,如 Autofac、Unity、Ninject 和 SimpleInjector 建立在之前的经验之上,因此它们也不会缺少这些重要功能。

现在答案中更主观的部分是:我喜欢认为 Windsor 将可用性、可扩展性和集成模块完美地结合在一起。

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

可扩展性:Lots of extension points,您可以使用它来自定义或覆盖几乎所有默认行为。

集成:Windsor 拥有lots of facilities(模块),可以轻松与其他框架/库集成。其他集成包括ASP.NET MVC、MonoRail、Workflow Foundation、NServiceBus、MassTransit、Rhino Service Bus、Quartz.Net、SolrNet、SolrSharp、Windows Fax Services。

This series of articles 涵盖了温莎的许多细节和扩展点。

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

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

【讨论】:

您能否提供指向服务定位器反模式参考的链接?谢谢 @Ruben:Google 上出现了几篇文章:google.com/search?hl=en&q=service+locator+anti-pattern 是的,我试过了。我希望你有一个特定的链接。我认为这是最好的解释:blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx【参考方案2】:

对我来说,Windsor 有两个杀手锏,我相信大多数其他容器都不具备。

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

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

除此之外,我只是碰巧喜欢 Windsor 的工作方式与预期的差不多 (contrary to some other containers) 以及它如何解决小问题。例如,创建装饰服务非常简单。我也非常喜欢它流畅的注册 API,它适用于两种简单的场景,并且在你想做一些高级的事情时不会变得太扭曲​​和复杂。加上许多其他小事,尽管这里的事情可能非常主观。

【讨论】:

你能发布一个关于第一点如何工作的链接吗?是不是类似于公共服务定位器? google.com 是你的朋友。一旦有时间,我将改进有关此的文档。我的博客上也有关于这些功能的博文。

以上是关于比较温莎城堡、Unity 和 StructureMap的主要内容,如果未能解决你的问题,请参考以下文章

温莎古堡的介绍

C#、温莎城堡和复合设计模式

MVC4 中使用城堡温莎的 HttpClient 的生活方式

想在中世纪城堡里当贵族?到欧洲来场建筑巡礼

谁能介绍一下温莎古堡?

温莎古堡是啥时期的建筑呢