수명은 DI 프로세스에 의해 생성 된 오브젝트의 유효 기간을 의미합니다. 요청에 따라 각 요청이 자체 개체를 가져옵니다. 개체가 현재 사용자에 의존하는 경우 해당 요청에 대한 쿼리 문자열 값 또는 요청 헤더의 값/존재로 인해 PerRequest 수명이 적절합니다. 예를 들어, 서비스 위치에 따라 설정이 다른 경우 (예 : web.config에서 값을 저장 한 경우) 컨테이너는 global.asa에서 가장 많이 생성되며 컨테이너가있는 한 이러한 객체를 유지할 수 있습니다.
구체적인 예 :
당신은 당신의 사이트의 일부 서비스가 있고 해당 서비스의 vNext로 이주. 사용자는 &myService=vNext
과 같은 매개 변수를 포함하는 링크를 클릭하여 새로운 행동을 볼 수 있습니다. Factory 메소드는이 매개 변수의 값을 사용하여 각 요청에 대해 vNow 또는 vNext를 선택합니다.
container.RegisterInstance<IProductFactory>("enterprise", new EnterpriseProductFactory());
container.RegisterInstance<IProductFactory>("retail", new RetailProductFactory());
container.RegisterVersionedServiceFactory<IProductFactorySettings, IProductFactory>();
이 예제 RegisterVersionedServiceFactory에서 아무것도하지 않습니다하지만 현재 요청에 사용할 IProductFactory 인스턴스의 결정 확장 방법 :
여기에 당신이 시작하는 일부 의사 코드이다. 팩토리는이 요청 (수천 초당)에 사용할 현재 인스턴스 (서비스 수명 동안 2 개만 있음)를 제공합니다.
이 패턴은 최근 매우 안정적이고 매우 유연한 매우 큰 사이트를 만들었습니다. 새로운 버전의 서비스는이 똑같은 패턴을 사용하여 사이트를 매우 안정적으로 유지하는 데 사용됩니다.
'DI 용 ASP.NET MVC 애플리케이션을 작성 중입니다. '- Unity 프로젝트가 종료되었음을 유의하십시오. 새로운 응용 프로그램의 경우 여전히 활성 상태 인 [기타 여러 컨테이너] (https://github.com/danielpalme/IOCPerformance) 중 하나를 사용하는 것이 가장 좋습니다. – NightOwl888
정말요? .net 응용 프로그램에 가장 적합한 것은 무엇입니까? 나는 또한 cross-cutting 관심사를 구현할 필요가있다. 오토 팩? –