[英]Error Asp.Net Mvc and WebApi2 with Ninject Ioc Container - Parameterless Constructor is missing
[英]WebApi2 with IoC
在我的MVC5應用程序中,我使用了來自NuGet的Unity.Mvc4來管理我的依賴項注入。
這將創建Bootstrapper.cs
,如下所示:
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
下初始化Unity,如下所示:
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”類型的控制器時發生錯誤。 確保控制器具有無參數的公共構造函數。
我知道我需要在WebApiConfig
下使用DependencyResolver進行WebApiConfig
,但是我不太確定該做什么。 這是我的班級現在的樣子:
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 }
);
}
}
在此問題上的任何幫助/建議將不勝感激。
您僅配置了MVC依賴關系解析器,還需要針對Web API框架進行配置。 這兩個框架都有自己的依賴項注入配置。
在Initialise
方法中添加它
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver =
new Unity.WebApi.UnityDependencyResolver(container);
return container;
}
您還需要安裝Unity.WebAPI
軟件包
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.