IWindsorContainer和IUnityContainer有什么区别?

Sho*_*gdm 7 asp.net-mvc entity-framework nhibernate-mapping fluent-nhibernate

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

小智 3

我使用过这两个容器,它们之间的巨大区别是,多年来使用每个容器都是 UnityContainer 由团队管理,并且仍在扩展。Windsor 容器在返回实际错误方面并不是很好。UnityContainer 有很好的文档,并且使用 nuget 或其他存储库管理器安装起来非常简单。

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

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

如果您查看 Unity,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>();
Run Code Online (Sandbox Code Playgroud)