IWindsorContainer和IUnityContainer有什么区别?

时间:2017-02-20 04:46:54

标签: asp.net-mvc entity-framework fluent-nhibernate nhibernate-mapping

我在不同项目中使用IWindsorContainerIUnityContainer之间的两种类型的容器进行服务和接口绑定。但是我不确定有什么区别?他们有相同的功能吗?如果是,那么在现有的情况下需要开发另一个。或者他们有一些差异?如果是,那是什么?我将使用哪一个目的?我有一个小documentation反对这种混乱,但我没有安静地抓住它。所以,如果你让我知道,那么我将不胜感激。请注意,我在这里使用NHibernet映射。

2 个答案:

答案 0 :(得分:3)

我已经使用了两个容器以及它们之间的巨大差异,多年来使用它们一直是UnityContainer由团队管理并且仍在扩展。 Windsor容器在返回真正的错误方面不是很好。 UnityContainer具有出色的文档,使用nuget或其他存储库管理器进行安装非常简单。

这就是我的意思......如果你看看如何使用他们的代码,https://github.com/castleproject/Windsor/blob/master/docs/README.md,例如windsor非常模糊。

public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                            .Where(Component.IsInSameNamespaceAs<King>())
                            .WithService.DefaultInterfaces()
                            .LifestyleTransient());
    }

如果你看一下https://github.com/unitycontainer/unity/blob/master/quickstarts/CS/EventBroker/Src/Stoplight/Program.cs的统一性,通过以不同的方式注册它们会变得更清楚。当你在兔子洞下面时的错误代码对Unity来说也更加干净。

IUnityContainer container = new UnityContainer()

            .AddNewExtension<SimpleEventBrokerExtension>()

            .RegisterType<ILogger, TraceLogger>()

            .RegisterType<IStoplightTimer, RealTimeTimer>();

答案 1 :(得分:1)

查看以下链接。这可能会对您有所帮助https://visualstudiomagazine.com/articles/2014/09/25/refactor-5.aspx