Unity有CreateChildContainer,在SimpleInjector或LightInject中有等价物

时间:2014-02-12 22:12:02

标签: inversion-of-control simple-injector light-inject

我们正在评估SimpleInjector和LightInject以在我们的应用程序中替换我们当前的Unity实现。 Unity有一个方法,允许调用CreateChildContainer()的容器层次结构。是否存在SimpleInjector和LightInject的等价物?

1 个答案:

答案 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 的各种扩展名调用。

可以在LightInject.WebLightInject.MvcLightInject.WebApi找到此示例。