C# 在ASP.NET MVC 4中使用Unity-依赖项注入错误
我试图使用Unity将依赖项注入web api控制器 我跟着 不过,我在实例化构造函数时仍然会出错,因为并没有无参数的构造函数 控制器:C# 在ASP.NET MVC 4中使用Unity-依赖项注入错误,c#,asp.net,asp.net-mvc,dependency-injection,unity-container,C#,Asp.net,Asp.net Mvc,Dependency Injection,Unity Container,我试图使用Unity将依赖项注入web api控制器 我跟着 不过,我在实例化构造函数时仍然会出错,因为并没有无参数的构造函数 控制器: public class ContactsController : ApiController { IContactsRepository repository; public ContactsController(IContactsRepository repository) {
public class ContactsController : ApiController
{
IContactsRepository repository;
public ContactsController(IContactsRepository repository)
{
this.repository = repository;
}
public List<ContactDTO> GetAllContacts()
{
return repository.GetAllContacts().ToList();
}
}
在Global.asax
文件中,我在Bootstrapper.cs
中添加了:
container.RegisterType<IContactsRepository, ContactsRepository>();
container.RegisterType();
但是,当我尝试通过url访问联系人时,会出现以下错误:
尝试创建类型为的控制器时出错
“联系人控制器”。确保控制器具有
无参数公共构造函数
我遗漏了什么吗?我看到您正在使用
ApiController
——因为WebAPI依赖项注入是以不同的方式实现的。您所指的是解决依赖关系的标准MVC方法,这对WebAPI不起作用
您需要安装Unity.WebAPI包才能使其正常工作Unity通常有一个类,在加载应用程序时调用该类并将其放入应用程序启动?基本上,我认为您还没有将依赖解析程序设置为使用unity。。。因此,当解析器尝试解析控制器时,它无法…是的,引导程序.Initialise();这是您应该使用的方法。请参阅,不应该进行初始化,因为它是在加载应用程序时启动的,而不是在global.asax为ranUhm时。。我可能没有充分考虑这一点,但只是添加一个空的、无参数的ctor?
public class ContactsRepository : IContactsRepository
{
public IEnumerable<ContactDTO> GetAllContacts()
{
using (var db = new ContactDatabaseEntities())
{
foreach (var contact in db.Contacts)
{
yield return contact.Convert();
}
}
}
}
Bootstrapper.Initialise();
container.RegisterType<IContactsRepository, ContactsRepository>();