我们正在评估 SimpleInjector 和 LightInject 以替换我们应用程序中当前的 Unity 实现。 Unity 有一个方法可以通过调用 CreateChildContainer() 实现容器层次结构。 SimpleInjector 和 LightInject 是否有等效项?
最佳答案
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.Web 中找到, LightInject.Mvc和 LightInject.WebApi .
关于inversion-of-control - Unity 有 CreateChildContainer,在 SimpleInjector 或 LightInject 中有等价物吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740918/