2014-02-12 4 views
2

응용 프로그램에서 현재 Unity 구현을 대체하기 위해 SimpleInjector 및 LightInject를 평가하는 중입니다. Unity에는 CreateChildContainer()를 호출하여 컨테이너의 계층 구조를 허용하는 메서드가 있습니다. SimpleInjector 및 LightInject에 해당하는 기능이 있습니까?Unity에 CreateChildContainer가 있습니다. SimpleInjector 또는 LightInject에 동일하게 적용됩니다.

+0

간단한 인젝터에는 이것을위한 LifetimeScope 라이프 스타일이 있습니다. 달성하고자하는 구체적인 예를 몇 가지 들려 줄 수 있습니까? – Steven

+0

두 프레임 워크에 대한 제한 사항 목록은 어디서 얻을 수 있습니까? 즉, 이러한 프레임 워크가 Unity와 비교하여 아직 수행하지 않은 목록. – Ray

+0

[this blog (http://blog.ashmind.com/2008/08)을 기반으로 한 [이 기능 비교] (http://featuretests.apphb.com/DependencyInjection.html))를 살펴볼 수 있습니다./19/comparing-net-di-ioc-frameworks-part-1 /)에 의해 정의된다. – Steven

답변

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.MvcLightInject.WebApi에서 찾을 수 있습니다.

+0

WebRequestLifestyle과 LifetimeScopeLifestyle이라는 점을 제외하면 Simple Injector에서 작동하는 방식은 거의 같습니다. – Steven

+0

스티븐, http://featuretests.apphb.com/DependencyInjection.html에서 비교 시트를 보았습니다. SimpleInjector에 관한 그 페이지의 정보가 잘못되어 있는지 말해 줄 수 있습니까? LightInject의 점수가 더 높습니다. 페이지가 시대에 뒤진 지 궁금합니다. – Ray

+0

@ 레이 : 비교는 여전히 정확합니다. Simple Injector 점수는 두 가지 이유로 매우 낮습니다. 1. 일부 기능은 지원되지만 제네릭 테스트 슈트에 맞지 않습니다 ('메모'가 표시됨). 그리고 2. 개발자가 잘못된 방향 (예 : 자동 등록 Lazy 및 Func )으로 개발자를 인도한다고 생각하기 때문에 의도적으로 많은 기능이 빠져 있지만 필요한 경우 쉽게 구현할 수 있습니다. (사이드 노트 : 질문을받는 사람이 알림을 받는지 확인하려면 이름 앞에 @ 기호를 사용하는 것을 잊지 마십시오. 실수로 귀하의 질문에 마주 쳤습니다.) – Steven