응용 프로그램에서 현재 Unity 구현을 대체하기 위해 SimpleInjector 및 LightInject를 평가하는 중입니다. Unity에는 CreateChildContainer()를 호출하여 컨테이너의 계층 구조를 허용하는 메서드가 있습니다. SimpleInjector 및 LightInject에 해당하는 기능이 있습니까?Unity에 CreateChildContainer가 있습니다. SimpleInjector 또는 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에서 찾을 수 있습니다.
WebRequestLifestyle과 LifetimeScopeLifestyle이라는 점을 제외하면 Simple Injector에서 작동하는 방식은 거의 같습니다. – Steven
스티븐, http://featuretests.apphb.com/DependencyInjection.html에서 비교 시트를 보았습니다. SimpleInjector에 관한 그 페이지의 정보가 잘못되어 있는지 말해 줄 수 있습니까? LightInject의 점수가 더 높습니다. 페이지가 시대에 뒤진 지 궁금합니다. – Ray
@ 레이 : 비교는 여전히 정확합니다. Simple Injector 점수는 두 가지 이유로 매우 낮습니다. 1. 일부 기능은 지원되지만 제네릭 테스트 슈트에 맞지 않습니다 ('메모'가 표시됨). 그리고 2. 개발자가 잘못된 방향 (예 : 자동 등록 Lazy
간단한 인젝터에는 이것을위한 LifetimeScope 라이프 스타일이 있습니다. 달성하고자하는 구체적인 예를 몇 가지 들려 줄 수 있습니까? – Steven
두 프레임 워크에 대한 제한 사항 목록은 어디서 얻을 수 있습니까? 즉, 이러한 프레임 워크가 Unity와 비교하여 아직 수행하지 않은 목록. – Ray
[this blog (http://blog.ashmind.com/2008/08)을 기반으로 한 [이 기능 비교] (http://featuretests.apphb.com/DependencyInjection.html))를 살펴볼 수 있습니다./19/comparing-net-di-ioc-frameworks-part-1 /)에 의해 정의된다. – Steven