Unity имеет CreateChildContainer, есть ли эквивалент в SimpleInjector или LightInject

Мы находимся в процессе оценки SimpleInjector и LightInject, чтобы заменить нашу текущую реализацию Unity в нашем приложении. В Unity есть метод, который допускает иерархию контейнеров с вызовом CreateChildContainer(). Есть ли эквивалент для SimpleInjector и LightInject?

1 ответ

Для этого 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.

Другие вопросы по тегам