【问题标题】:ASP.NET MVC: unity and HierarchicalLifeTimemanagerASP.NET MVC:统一和 HierarchicalLifeTimemanager
【发布时间】:2015-09-21 11:58:17
【问题描述】:

我有简单的 asp.net mvc 应用程序。我为这个项目添加了统一性,并测试了不同的生命周期管理器。我知道 HierarchicalLifitemeManager 就像 ContainerControlledLifetimeManager (单音),但统一为每个子统一容器创建不同的实例。我创建了具有在构造函数中设置的单个 Guid 属性的类,使用 HierarchicalLifitemeManager 在控制器中注入了这个类,并在视图中显示了这个 Guid。每次按 F5 时,我都会看到新的 Guid。 HierarchicalLifitemeManager 是如何工作的?

【问题讨论】:

    标签: asp.net-mvc unity-container lifetime


    【解决方案1】:

    它工作正常。 您会看到不同的 Guid,因为您为每个请求 (F5) 创建了新的根容器。 尝试这样做:

    class HierarchicalService
    {
        public Guid Value {get;set;}
        public HierarchicaService()
        {
            Value = Guid.Guid.NewGuid();
        }
    }
    
    register it:
    ...
    container.RegisterType<HierarchicalService>(new HierarchicalLifitemeManager());
    ...
    
    class MyController
    {
        MyController(HierarchicalService serviceA, HierarchicalService serviceB)
        {
            //...compare values from both services
        }
    }
    
    And compare it with this:
    
    class MyController
    {
        MyController(IUnityContainer container)
        {
            var serviceA = container.CreateChildContainer().Resolve<HierarchicalService>();
            var serviceB = container.CreateChildContainer().Resolve<HierarchicalService>();
            //...compare values from both services
        }
    }
    

    因此,不同之处在于,当您有一个根容器并且您需要通过创建具有隔离范围的新子容器(例如 UnitOfWorks)来分离一些操作时。阅读有关child containers 的更多信息。

    【讨论】:

    • @oblomov86 你试过了吗?
    • Unity 是否为 HierarchicalLifitemeManager 的每个请求创建单独的子容器?
    • @MaxQuestion 不,你需要自己创建子容器,但是Unity从不同的子容器创建不同的实例
    • 我的意思是:使用 HierarchicalLifitemeManager 我们有每个子容器的新实例。因此,如果每个请求都有自己的实例——在这种情况下,每个请求都有自己的子容器。我是不是有问题?
    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多