ASP.NET MVC:统一和 HierarchicalLifeTimemanager

ASP.NET MVC: unity and HierarchicalLifeTimemanager

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

它工作正常。 您会看到不同的 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