구성에 특별한 것은 없으며 @Patryk이 올바른 설명서 here을 지적했습니다. Simple Injector는 자동 배선을 수행하므로 생성자 인수를 명시 적으로 지정할 필요가 없습니다.
하지만 현재 설정에 대해 악취가납니다. DbContext
은 (는) 싱글 톤입니다. 전체 애플리케이션 기간 동안 하나의 인스턴스 만 가질 수 있습니다. 거의 모든 경우에 very bad idea입니다. 응용 프로그램이 오래 동안 (예 : Windows 서비스) 또는 많은 스레드를 동시에 처리합니다 (예 : ASP.NET 및 WCF). 콘솔 응용 프로그램과 같이 매우 짧은 시간 동안 살아있는 단일 스레드 응용 프로그램이있는 경우에만 하나의 DbContext 만있을 수 있습니다. DbContext를 싱글 톤으로 등록하고 싶지는 않습니다.
아마도 싱글 톤이 아니며 실제로 요청 당 1 회이 전화는 RegisterTypes
입니다. 이 경우 하나의 요청마다 하나의 DbContext를 갖게됩니다. 그러나 이는 요청마다 새 컨테이너 인스턴스를 만드는 것이 좋지 않을 수도 있음을 의미합니다. Unity와 Simple Injector 모두 성능면에서 매우 좋지 않습니다. DI 라이브러리는 특히 응용 프로그램의 지속 기간 동안 하나의 단일 컨테이너 인스턴스를 가지도록 최적화되어 있습니다.
오히려 애플리케이션 기간 동안 단일 컨테이너 인스턴스를 보유하고 DbContext를 보통 Scoped 라이프 스타일에 등록하려고합니다.
단순 주입기에는 many scoped lifestyles이 있으며 각각은 선택한 기술에 따라 다릅니다. 당신이 MVC를 사용하는 가정, 등록은 다음과 같습니다
public static void RegisterTypes(Container container)
{
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register<MyContex>(Lifestyle.Scoped);
container.Register(typeof(IEntityRepository<>), typeof(EntityRepository<>));
container.Register(typeof(IEntityService<>), typeof(EntityService<>));
}
이
EntityRepository<T>
의 등록을 유의 마십시오.
EntityRepository<T>
에 생성자 인수가
MyContext
이고
MyContext
이 컨테이너에 등록되어 있으면 Simple Injector가 생성자에서이 종속성을 주입 할 수 있습니다. 이 과정을 자동 배선이라고하며 일반적으로 컨테이너가이 작업을 수행하도록해야합니다. DI 구성이 훨씬 유지 보수 가능하기 때문입니다.
[docs] (https://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Registration-Of-Open-Generic-Types)를 원할 수도 있습니다. MyContext가 컨테이너에 등록되어있는 한, 파라미터로서 해결됩니다. –
또는 [Read The Docs] (https://simpleinjector.readthedocs.org/en/latest/)에서 문서를 읽을 수 있습니다. – Steven