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。
我有一个简单的 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。