2013-11-15 52 views
1

我试图在ASP.NET Web Api项目中配置Unity IoC。 Unity.WebAPI包我已经安装:使用Web API配置Unity IoC 4.5

PM>安装,包装Unity.MVC4

,并添加下面的代码到Initialise方法Bootstrapper类:

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

而且我已经在容器中注册了我的存储库:

container.RegisterType<IProductRepository, ProductRepository>(); 

但我的应用程序崩溃的错误Type 'MvcApplication1.Controllers.ValuesController' does not have a default constructor. 有人可以指出我错过了什么?我使用.Net Framework 4.5。 Unity的哪个包可以用于我的目的(Unity.WebAPI,Unity.MVC4,...)?

更新时间:注射库到控制器:

private readonly IProductRepository _repository; 

public ValuesController(IProductRepository repository) 
{ 
    _repository = repository; 
} 
+0

我想你应该添加ValuesController'的'代码,以及似乎里面错误与之相关,那个控制器里面有哪些方法,你试图调用哪一个? – DrCopyPaste

+0

糟糕!对不起,刚更新。 –

+0

等一下!首先你说'我已经安装了Unity.WebAPI',但是你现在安装了'Unity.MVC4'这是它的一个,你在建什么? MVC应用程序或Web API应用程序? – DrCopyPaste

回答

1

你所做的看起来不错,到目前为止,但我认为你缺少只是这一行

Bootstrapper.Initialise(); 

这应该是g Ø到应用程序Global.asax.cs对MVC的应用程序,例如启动代码,只需把它放在那里,在年底这个方法

protected void Application_Start() 
+0

是啊!谢谢你,这是非常有趣的遗漏:) –

+0

@ alex.mironov很高兴帮助;) – DrCopyPaste

0

也许你在这篇文章下面。如果没有,它可以帮助你。

http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

关于错误,请尝试添加一个构造函数控制器不带参数:

public ValuesController() 
{ 

} 
+1

我不需要无参数构造函数,因为我必须将资源库注入控制器... –

+0

我很抱歉,您是正确的。 我刚才提到了无参数的构造函数,因为它看起来像代码中的某个地方应该是可用的控制器的默认构造函数,这是一个没有参数的构造函数。 – scubaFun

+0

@emendezrivas只是为了澄清一下。你所描述的是默认行为。然而,Unity的IoC应该重写该行为,因为Unity始终会尝试将构造函数与最多的参数进行匹配。因此,在其他情况下,您应该是对的,但对于IoC而言,您必须“切换”您的脑袋,以确保默认行为不同=>即配置错误。 – DrCopyPaste