我们正在评估 SimpleInjector 和 LightInject 以在我们的应用程序中替换我们当前的 Unity 实现。Unity 有一个方法允许通过调用 CreateChildContainer() 实现容器层次结构。是否有 SimpleInjector 和 LightInject 的等价物?
问问题
507 次
1 回答
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.Web、LightInject.Mvc和LightInject.WebApi中找到。
于 2014-02-13T07:06:09.543 回答