2016-06-03 3 views
0

WebApi 프로젝트를 VS2013에서 VS2015로 마이그레이션 한 후 내 종속성 주입을 사용할 수 없습니다. StructureMap을 사용하고 있습니다. 이 예외 메시지가 포함 된 오류가 발생합니다. "형식이 'SearchListController'인 컨트롤러를 만들 때 오류가 발생했습니다. 컨트롤러에 매개 변수없는 public 생성자가 있는지 확인하십시오." 이것은 일하는 데 사용되었습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 이 질문을 올바르게 작성하지 않았다면 용서해주십시오. 나는 이것이 내가 여기 게시 한 첫 번째 질문이라고 생각한다.Structuremap - 컨트롤러에 매개 변수가없는 public 생성자가 있는지 확인하십시오.

namespace SearchWebAPI.DependencyResolution 
    { 
     using StructureMap; 

     public static class IoC 
     { 
      public static IContainer Initialize() 
      { 
       return new Container(c => 
       { 
        c.AddRegistry<DefaultRegistry>(); 
       }); 
      } 
     } 
    } 

namespace SearchWebAPI.DependencyResolution { 
    using StructureMap.Configuration.DSL; 
    using StructureMap.Graph; 
    using SearchWebAPI.Models; 

    public class DefaultRegistry : Registry { 
     #region Constructors and Destructors 

     public DefaultRegistry() { 
      Scan(
       scan => { 
        scan.TheCallingAssembly(); 
        scan.WithDefaultConventions(); 
        scan.With(new ControllerConvention()); 
       }); 
      For<ISearchListRepository>().Use<SearchListRepository>(); 
     } 

     #endregion 
    } 
} 
+2

는 하나가 MVC의'DependencyResolver' 또는'IControllerFactory' 대체 마십시오 코드의

namespace SearchWebAPI.DependencyResolution { using StructureMap; public static class IoC { public static IContainer Initialize() { return new Container(c => c.AddRegistry<DefaultRegistry>()); } } } namespace SearchWebAPI.DependencyResolution { using StructureMap.Configuration.DSL; using StructureMap.Graph; using SearchWebAPI.Models; public class DefaultRegistry : Registry { #region Constructors and Destructors public DefaultRegistry() { Scan( scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); scan.With(new ControllerConvention()); }); } #endregion } } namespace SearchWebAPI { using SearchWebAPI.DependencyResolution; using StructureMap; using System.Web.Http; using System.Web.Mvc; public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); App_Start.StructuremapMvc.Start(); //StructureMap Container IContainer container = IoC.Initialize(); //Register for MVC DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); //Register for Web API GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container); } } } 

두 줄이 내 문제를 해결 : 여기 내 코드는? MVC를 StructureMap에 전달하려면이 중 하나가 필요합니다. – Steven

답변

2

오류는 (유형 'SearchListController'의 컨트롤러를 만들려고 할 때 오류가 발생했습니다)보고있는이 StructureMap은 컨트롤러의 종속성을 해결할 수있는 보통 결합의 결과입니다.

코드를 살펴본 후 문제가있는 곳을보기가 어렵습니다. ASP.NET 응용 프로그램에서 어떻게 StructureMap을 구성 했습니까? (자신의 컨트롤러 팩토리를 통해 또는 MVC의 DependencyResolver을 통해)? 더 많은 코드를 제공 할 수 있습니까?

또한 StructureMaps의 AssertConfigurationIsValid();을 사용하면 문제를 디버깅 할 수 있습니다. 다음과 같이 호출 할 수 있습니다.

var container = new Container(); 
container.AssertConfigurationIsValid(); 
1

이 기능을 사용하고 있습니다.

//Register for MVC 
DependencyResolver.SetResolver(new StructureMapDependencyResolve(container)); 

//Register for Web API 
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container); 
관련 문제