0

untiy을 사용하여 종속성 주입 문제로 고민하고 있습니다. 나는이 링크 https://www.asp.net/web-api/overview/advanced/dependency-injection컨트롤러에 웹 API에 매개 변수없는 public 생성자가 있는지 확인하십시오.

에 따라 구현 그러나이 오류를 가지고있다 :

{ 
 
    "Message": "An error has occurred.", 
 
    "ExceptionMessage": "An error occurred when trying to create a controller of type 'WebAPIController'. Make sure that the controller has a parameterless public constructor.", 
 
    "ExceptionType": "System.InvalidOperationException", 
 
    "StackTrace": " at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()", 
 
    "InnerException": { 
 
    "Message": "An error has occurred.", 
 
    "ExceptionMessage": "Type 'Fairmoves.Controllers.WebAPIController' does not have a default constructor", 
 
    "ExceptionType": "System.ArgumentException", 
 
    "StackTrace": " at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)" 
 
    } 
 
}

내 웹 API 컨트롤러 :

[RoutePrefix("api/WebAPI")] 
public class WebAPIController : ApiController 
{ 
    private readonly IUserBusinessService UserBusinessService; 
    private readonly ILoginBusinessService LoginBusinessService; 

    //public WebAPIController():base() 
    //{ 
    //} 

    public WebAPIController(IUserBusinessService UserBusinessService, ILoginBusinessService LoginBusinessService) 
    { 
     this.UserBusinessService = UserBusinessService; 
     this.LoginBusinessService = LoginBusinessService; 
    } 
    [HttpPost] 
    public IHttpActionResult Login([FromBody]AuthModels.LoginModel model) 
    { 
     // string strUserId = credentials.LoginName; 
     //string strPassword = credentials.Password; 
     var serviceResultDAO1 = LoginBusinessService.LoginUserSubmit(model.LoginName); 
    } 
} 

UnityResolver.cs :

를,451,515,
public class UnityResolver:IDependencyResolver 
{ 
    protected IUnityContainer container; 

    public UnityResolver(IUnityContainer container) 
    { 
     if (container == null) 
     { 
      throw new ArgumentNullException("container"); 
     } 
     this.container = container; 
    } 

    [DebuggerStepThrough] 
    public object GetService(Type serviceType) 
    { 
     try 
     { 
      return container.Resolve(serviceType); 
     } 
     catch (ResolutionFailedException) 
     { 
      return null; 
     } 
    } 

    [DebuggerStepThrough] 
    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     try 
     { 
      return container.ResolveAll(serviceType); 
     } 
     catch (ResolutionFailedException) 
     { 
      return new List<object>(); 
     } 
    } 

    public IDependencyScope BeginScope() 
    { 
     var child = container.CreateChildContainer(); 
     return new UnityResolver(child); 
    } 

    public void Dispose() 
    { 
     container.Dispose(); 
    } 

} 

}

WebApiConfig.cs : 어디에 문제가

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     //config.DependencyResolver = new NinjectResolver(); 

     var container = new UnityContainer(); 
     container.RegisterType<ILoginBusinessService, LoginBusinessService>(new HierarchicalLifetimeManager()); 
     container.RegisterType<IUserBusinessService, UserBusinessService>(new HierarchicalLifetimeManager()); 
     config.DependencyResolver = new UnityResolver(container); 
     //DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

     config.MapHttpAttributeRoutes(); 

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

수 없습니다

식별하기 위해? 코드에 들어가서 알려주세요. 나는이 모든 아래 따랐다

Make sure that the controller has a parameterless public constructor error

Make sure that the controller has a parameterless public constructor using Ninject

Autofac - Make sure that the controller has a parameterless public constructor

Make sure that the controller has a parameterless public constructor? 그러나이 중 어느 것도 내 문제를 해결하지 연결합니다.

+0

문제는 응용 프로그램이 생성자 매개 변수의 종속성을 해결할 수없는 것 같습니다. 구현 된 클래스의 .dll이 웹 API의 bin 폴더에 있는지 확인하십시오. –

+0

네, 그게 문제입니다. –

+0

예, 있습니다. –

답변

2

하나의 프로젝트에서 MVC와 WebAPI를 모두 사용하기 때문에이 두 가지 종속성을 모두 해결해야하는이 link을 사용하여 이해했습니다. 난 내 프로젝트에 Unity.WebAPI라는 하나 개의 패키지를 설치 한 후

그래서, 내가

var container = new UnityContainer(); 
    container.RegisterType<ILoginBusinessService, LoginBusinessService>(new HierarchicalLifetimeManager()); 
    container.RegisterType<IUserBusinessService, UserBusinessService>(new HierarchicalLifetimeManager()); 
    config.DependencyResolver = new UnityResolver(container); 

파일 WebAPIConfig.cs 코드 아래에 제거.

은, 그것 뿐이다

GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 

파일 UnityConfig.cs 코드 아래에 추가 내 문제를 해결!

+0

Unity.WebAPI Nuget 구성 요소가 내 문제를 해결했습니다. 감사합니다. – vinay

관련 문제