我们正在评估SimpleInjector和LightInject,以取代我们应用程序中当前的Unity实现。Unity 有一个方法,允许容器层次结构调用 CreateChildContainer()。SimpleInjector和LightInject有等效的吗?
LightInject为此使用PerScopeLifetime和PerRequestLifetime。
PerScopeLifetime 每个范围仅创建给定服务的一个实例,如果它实现了 IDisposable,则在作用域的末尾释放该服务实例。
PerRequestLifetime 为每个请求 (GetInstance) 创建新实例,并在请求结束时释放所有实例。
作用域本身是使用 BeginScope 方法启动的。
每个范围生命周期
container.Register<IFoo, Foo>(new PerScopeLifetime());
using(container.BeginScope())
{
var firstInstance = container.GetInstance<IFoo>();
var secondInstance = container.GetInstance<IFoo>();
Assert.AreSame(firstInstance, secondInstance);
} //<- Instances implementing IDisposable are disposed here.
每个请求生命周期
container.Register<IFoo, Foo>(new PerRequestLifetime());
using(container.BeginScope())
{
var firstInstance = container.GetInstance<IFoo>();
var secondInstance = container.GetInstance<IFoo>();
Assert.AreNotSame(firstInstance, secondInstance);
} //<- Instances implementing IDisposable are disposed here.
通常,BeginScope 方法是由 LightInject 可用的各种扩展调用的。
这方面的例子可以在LightInject.Web,LightInject.Mvc和LightInject.WebApi中找到。