나는 webapi 프로젝트에서 작업 중이며 Unity를 IOC 컨테이너로 사용하고 있습니다. 유니티 의존성 분석기에 런타임 값 주입하기
unityContainer.RegisterType<BaseProvider, CaseProvider>(new HierarchicalLifetimeManager());
unityContainer.RegisterType<IRulesEngine, RulesEngine>();
unityContainer.RegisterType<IQuestionController, QuestionController>();
unityContainer.RegisterType<IAPIThing, WebAPIThing>();
지금 BaseProvider의 생성자가 케이스 식별자 매개 변수로 int를 받아 들인다 : 나는 다음과 같은 계층 종속성 무언가의 세트가있다. WebAPIThing은 생성자에서 BaseProvider를 사용합니다. 일반적으로 비 웹 시나리오에서 내가 좋아하는 뭔가를 사용하는 경우 ID를 주입하는 것 :
public static IAPIThing GetIAPIThing(int caseId)
{
return CreateUnityContainer().Resolve<IAPIThing >(new ParameterOverride("caseId", caseId).OnType<CaseProvider>());
}
을하지만 명시 적으로 메소드를 호출 할 때에만 작동합니다. 웹 API 시나리오에서 API 컨트롤을 해결하기 위해 config.DependencyResolver = new UnityDependencyResolver(unityContainer);
을 사용하고 있습니다.
나는 여전히 DependencyResolver 실행시에 그 BaseProvider 개체를 확인하는 방법에 영향을해야합니다 생각합니다.
누구나 비슷한 것을해야합니까?
내가 작업 표시 다음 사용하여 시도 1
편집 :
unityContainer.RegisterType<BaseProvider>(
new HierarchicalLifetimeManager()
, new InjectionFactory(x =>
new CaseProvider(SessionManager.GetCaseID())));
여기서 'caseId'는 어디에서 오는 것입니까? 어떻게'caseId'가'GetIAPIThing'의 호출자에 의해 구축 되었습니까? 이 값은 세션, 요청 param, 쿠키에서 오는 값입니까? – Steven
@Steven CaseId가 저장되어 세션에서 제공됩니다. – SecretDeveloper