Unity 有 CreateChildContainer,在 SimpleInjector 或 LightInject



我们正在评估SimpleInjector和LightInject,以取代我们应用程序中当前的Unity实现。Unity 有一个方法,允许容器层次结构调用 CreateChildContainer()。SimpleInjector和LightInject有等效的吗?

LightInject为此使用PerScopeLifetimePerRequestLifetime

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

相关内容

  • 没有找到相关文章

最新更新