내 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 }
);
}
}
이 문제에 대한 도움이나 제안은 감사 할만한 것입니다.
내가 Ninject에 사용하는
Unity.WebAPI
패키지를 설치하는 데 필요한Initialise
방법이를 추가하고 다른 거기에 모든 것을 때문에 WebAPI를위한 별도의 패키지 (및 구성)이 필요합니다 네임 스페이스. Unity.MVC 이외에'Unity.WebAPI'와 같은 것이 필요해 보입니다. –