1

IoC 컨테이너로 Microsoft Unity를 사용하는 새로운 ASP.Net 웹 API 프로젝트를 진행 중입니다. 나는 어느 것이 맞는지 조금 혼란 스럽다.System.Web.Http.HttpConfiguration의 DependencyResolver와 System.Web.Mvc의 DependencyResolver

DependencyResolverSystem.Web.Http.HttpConfiguration으로 설정하면 그런 다음 종속성이있는 API 컨트롤러를 호출 할 수 있으며 종속성은 Unity 프레임 워크에 의해 해결됩니다. 그러나 HomeController과 같은 MVC 컨트롤러의 경우 DependencyResolverSystem.Web.Mvc에 설정하기 전까지 Unity는 종속성을 주입 할 수 없습니다.

API 컨트롤러 종속성은 해결되었지만 MVC 컨트롤러 종속성은 아닙니다. 아래 코드를 추가하면 :

public class IocConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var container = UnityConfig.GetConfiguredContainer(); 
     FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
     FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 
     config.DependencyResolver = new UnityResolver(container); 
     //DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 
} 

MVC 컨트롤러 종속성이 성공적으로 해결되었지만 API 컨트롤러 종속성은 없습니다. 내가 :(아래의 코드를 추가 할 경우 라인)

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

그냥 프로젝트 템플릿 ASP.Net 웹 API이며, 내가 Microsoft.Unity를 사용하고 있음을 알려을 취소합니다 언급.

DependencyResolver을 설정해야합니까, 아니면 제가 잘못하고있는 것이 좋습니까?

+2

에 사용

var container = UnityConfig.GetConfiguredContainer(); FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); //MVC DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container)); //Web API GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 

주 네임 스페이스. –

답변

1

동일한 프로젝트에서 MVC와 웹 API를 모두 사용하는 경우 두 가지 확인자를 모두 설정해야합니다. 동일한 코드 위치에서 그렇게 할 경우에는 네임 스페이스 앞에 접두어를 붙여서 확인자를 구분하십시오. 당신은 모두가 프로젝트에 MVC 프레임 워크와 WebApi 모두 포함되어있는 경우 설정합니다 다른 DependencyResolver