3

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

4

1 回答 1

3

LightInject 为此使用PerScopeLifetimePerRequestLifetime

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中找到。

于 2014-02-13T07:06:09.543 回答