我使用Unity.WebApi NuGet包(统一4.0.1和5.2.3 Unity.WebApi)在ASP.NET的WebAPI的解决方案。我现在面临的问题是,试图运行代码时,我得到的错误:。我在这里搜索了类似的线程,但我找不到符合我的问题的任何线程。Unity.WebApi |确保控制器具有一个无参数的公共构造
请不要只说“添加参数的构造函数”,因为它表明你显然不知道什么国际奥委会为什么该声明使得完全没有意义和失败的IoC的目的。我这样说是因为我在迄今为止所看到的很多其他线程中看到了这一点。
这是我Startup.cs(我使用Owin,所以我没有一个Global.asax):
public void Configuration(IAppBuilder app) {
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
// Registering unity stuff
UnityConfig.RegisterComponents();
app.UseWebApi(config);
}
这是我UnityConfig.cs:
public static class UnityConfig {
public static void RegisterComponents() {
var container = new UnityContainer();
// Register controller
container.RegisterType<MyController>();
// Register interface
container.RegisterType<IService, Service>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
这是我的API控制器:
public class MyController : ApiController {
private IService service
public MyController(IService service) {
this.service = service;
}
public IHttpActionResult Get() {
return Ok("All systems go!");
}
}
编辑
我把using语句,因为人有一个很难理解发生的问题using语句是否是存在的。
你能分享关于服务类的细节吗?你是否错过了注册服务类所需的任何类? – Noor
难道你的容器在被MVC实际使用之前就被丢弃了吗?它会抛出这个错误是不合逻辑的,但也许。尝试从使用块中取出var container = new UnityContainer()。 – NightOwl888
Noor没有可共享的细节。假设它所做的只是打印“Hello World”的方法。 NightOwl888我原本是这么做的,所以情况并非如此。在尝试解决这个问题的时候,使用来了。 我认为这是不可靠的,因为它是基于Owin的,但我不确定。 –