inversion-of-control - Unity 有 CreateChildContainer,在 SimpleInjector 或 LightInject 中有等价物吗

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

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

最佳答案

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.Web 中找到, LightInject.MvcLightInject.WebApi .

关于inversion-of-control - Unity 有 CreateChildContainer,在 SimpleInjector 或 LightInject 中有等价物吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740918/

相关文章:

c# - Light在 MVC 中注入(inject)数据库上下文

spring - 是否可以在两个地方 Autowiring 原型(prototype)范围类的相同实例

asp.net-web-api - 简易喷油器 : Implementation that depends on http request

java - MentaContainer 上的自动布线不起作用?

c# - 使用简单注入(inject)器注册 IAuthenticationManager

c# - 具有通用接口(interface)和组合的简单注入(inject)器 - 不注册接口(interface)

c# - 使用简单注入(inject)器和 .Net Core 注册数据库上下文

c# - 使用 spring.net 将类注入(inject)到 using 语句中

c# - 使用 LightInject 解析静态函数中的实例