0

내 MVC5 응용 프로그램에서 NuGet의 Unity.Mvc4 Unity을 사용하여 종속성 삽입을 관리했습니다. 이후WebApi2 with IoC

public static class Bootstrapper 
    { 
    public static IUnityContainer Initialise() 
    { 
     var container = BuildUnityContainer(); 

     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

     return container; 
    } 

    private static IUnityContainer BuildUnityContainer() 
    { 
     var container = new UnityContainer(); 

     // register all your components with the container here 
     // it is NOT necessary to register your controllers 

     // e.g. container.RegisterType<ITestService, TestService>();  
     RegisterTypes(container); 

     return container; 
    } 

    public static void RegisterTypes(IUnityContainer container) 
    { 
     container.RegisterType<IUnitOfWork, ApplicationDbContext>(); 
    } 
    } 

나는 다음과 같이 Global.asax.cs에서 유니티를 초기화 :

이 다음과 같습니다 Bootstrapper.cs 생성

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     Bootstrapper.Initialise(); // < ----- here 
    } 

내 일반 Controller (예 HomeController는) 그것의에 아무것도 주입 아무런 문제가 없습니다 건설자. 이 같은 동일한 프로젝트에 위치하고 내 ApiController 아무것도 주입하려고하지만 일단 :

public class ValuesController : ApiController 
{ 
    private readonly IUnitOfWork _repository; 

    public ValuesController(IUnitOfWork repository) 
    { 
     _repository = repository; 
    } 

    public IEnumerable<PatientData> Get() 
    { 
     return _repository.Repository.ReturnResults(); 
    } 

    public HttpResponseMessage Get(string id) 
    { 
     var patient = _repository.Repository.FindById(Convert.ToInt32(id)); 

     return Request.CreateResponse(HttpStatusCode.OK, patient); 
    } 
} 

와 나는 갑자기 다음과 같은 오류 메시지가 나타납니다이 생성자에 간단한 GET 요청을 호출하려고 :

'ValuesController'유형의 컨트롤러를 만들려고 할 때 오류가 발생했습니다. 컨트롤러에 매개 변수없는 public 생성자가 있는지 확인하십시오.

내가 WebApiConfig 아래에서 DependencyResolver로 뭔가를해야한다는 것을 알고 있지만, 나는 무엇을 확신하지 못합니다. 다음은 내 수업의 모습입니다.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

이 문제에 대한 도움이나 제안은 감사 할만한 것입니다.

+2

내가 Ninject에 사용하는 Unity.WebAPI 패키지를 설치하는 데 필요한 Initialise 방법

public static IUnityContainer Initialise() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); return container; } 

이를 추가하고 다른 거기에 모든 것을 때문에 WebAPI를위한 별도의 패키지 (및 구성)이 필요합니다 네임 스페이스. Unity.MVC 이외에'Unity.WebAPI'와 같은 것이 필요해 보입니다. –

답변

3

MVC 종속성 해결 프로그램 만 구성 했으므로 웹 API 프레임 워크에서도이 작업을 수행해야합니다. 두 프레임 워크는 고유 한 종속성 주입 구성을 갖습니다.

당신은 또한

+0

은 매력처럼 작동했습니다! –