2

ASP.NET MVC 4 응용 프로그램의 종속성 삽입에 Unity 컨테이너를 사용하고 있습니다.Unity를 사용하여 생성자 매개 변수를 동적으로 주입

  1. ProductController 생성자가 IProductsRepository 인스턴스를 얻어 다음과 같이 특정 제어기 (ProductController 말) 용

    는, I는 의존성 주입 시나리오가있다.
  2. IProductsRepository 구현에는 IProductsService 인스턴스를 허용하는 생성자가 있습니다.
  3. IProductsService 구현에는 웹 토큰의 쿠키에서 검색되는 인증 토큰 문자열을 허용하는 생성자가 있습니다.

컨트롤러 토큰이 생성 된 후에 만 ​​인증 토큰 쿠키를 검색 할 수 있다는 것을 고려할 때이 시나리오에서 자동 종속성 주입을 수행하는 올바른 방법은 무엇입니까?

1 사용 container.Resolve() 및 사용할 때 매개 변수를 전달합니다

답변

1

당신이 ProductService의 생성을 지연해야하는 경우가

  • 해당 서비스
  • 디 컨테이너 유형 Func<IProductService>의 대리자 공장을 자동 생성에 대리자를 주입하자에 대한 사용자 지정 공장을 주입 할 수 있습니다
  • 컨트롤러는 컨테이너가 소비자에서 서비스의 지연 생성을 숨기는 lazy proxy을 생성하자

소비자를 위해 완전히 투명하므로 세 번째 대안을 선호합니다. IProductService

0

나는 당신이 두 가지 옵션이 있습니다 생각합니다. 그래서 대신 생성자에서 IProductsService 요구의

당신의 ProductsRepository이 같은 것을 할 :이 ParameterOverride라고

IProductsService anInstance = container.Resolve<IProductsService>(new ParameterOverride("authenticationTokenString", "myValue")); 

합니다. MSDN 설명서는 다음에서 찾을 수 있습니다. Resolving Objects by Using Overrides

2 일반 인증 토큰 문자열을 전달하는 대신 인터페이스 뒤에 캡슐화하고 전달합니다. IProductsServiceIAuthenticationTokenProvider이 걸리고 해당 토큰에 대해 필요한 토큰을 묻습니다. 올바른 값을 얻기 위해 구현이 필요한 객체에 액세스합니다.

옵션 2를 선택합니다. 그것은 당신의 디자인을 깨끗하게 유지할 것이고, Unity는 수동 작업없이 모든 의존성 주입을 처리하게 할 것입니다.

관련 문제