0

간단한 질문이 있습니다. 나는 Miscrosoft의 UnityContainer에서 더 최신입니다. DI 용 ASP.NET MVC 애플리케이션을 Unity와 함께 쓰고 있습니다. 웹 응용 프로그램에 연결된 각 사용자마다 다른 컨테이너가 있습니까? 또는 CONTAINER가 모든 사용자에게 동일합니까? 그래서 ContainerControlledLifetimeManager를 사용하여 객체의 수명을 해결하면 하나의 사용자 세션에서만이 객체가 항상 동일하다는 것을 의미합니까?ASP.NET MVC의 Unity 컨테이너

귀하의 이해를 바랍니다.

감사합니다, 기독교

+0

'DI 용 ASP.NET MVC 애플리케이션을 작성 중입니다. '- Unity 프로젝트가 종료되었음을 유의하십시오. 새로운 응용 프로그램의 경우 여전히 활성 상태 인 [기타 여러 컨테이너] (https://github.com/danielpalme/IOCPerformance) 중 하나를 사용하는 것이 가장 좋습니다. – NightOwl888

+0

정말요? .net 응용 프로그램에 가장 적합한 것은 무엇입니까? 나는 또한 cross-cutting 관심사를 구현할 필요가있다. 오토 팩? –

답변

1

수명은 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 개만 있음)를 제공합니다.

이 패턴은 최근 매우 안정적이고 매우 유연한 매우 큰 사이트를 만들었습니다. 새로운 버전의 서비스는이 똑같은 패턴을 사용하여 사이트를 매우 안정적으로 유지하는 데 사용됩니다.

+0

내가 ContainerControlledLifetimeManager로 해결하면 데이터베이스에 연결하기위한 개체가이 개체가 내 wep 앱에 연결된 모든 클라이언트에 대해 동일한 것입니까? –

+0

대답은 다릅니다. 나는 일반적으로 데이터베이스를보다 잘 수행 할 수 있도록 연결을 공유하는 것이 바람직하다고 생각합니다. 완전히 다른 대화. 내가 본 것보다 코드에 더 깊이 파고 들어야 할 것이지만, 다른 조언을 해보기 만하면됩니다. 사용 횟수가있는 개체를 만들고 여러 가지 방법으로 등록한 다음 사용 횟수를 다시 얻으려고 요청하십시오. 항상 1이면 요청 당 하나씩 만드는 팩토리가 있습니다. 각 참조에서 증가하면 싱글 톤이됩니다. 증가하고있는 기간 후에 예기치 않은 사용 횟수가 1로 돌아 오면 버그가 있습니다. –