我们正在评估SimpleInjector和LightInject以在我们的应用程序中替换我们当前的Unity实现。 Unity有一个方法,允许调用CreateChildContainer()的容器层次结构。是否存在SimpleInjector和LightInject的等价物?
答案 0 :(得分:3)
LightInject使用 PerScopeLifetime 和 PerRequestLifetime 。
PerScopeLifetime 每个范围只创建一个给定服务的实例,如果它实现了IDisposable,则将服务实例放置在范围的末尾。
PerRequestLifetime 为每个请求(GetInstance)创建新实例,并在请求结束时处置所有实例。
范围本身是使用 BeginScope 方法启动的。
<强> PerScopeLifetime 强>
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.
<强> PerRequestLifetime 强>
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 的各种扩展名调用。