【发布时间】:2015-09-02 13:12:37
【问题描述】:
我正在尝试使用 Unity 将依赖项注入 Web api 控制器。
我关注了
http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection
虽然我在实例化构造函数时仍然出错,但没有无参数构造函数。
控制器:
public class ContactsController : ApiController
{
IContactsRepository repository;
public ContactsController(IContactsRepository repository)
{
this.repository = repository;
}
public List<ContactDTO> GetAllContacts()
{
return repository.GetAllContacts().ToList();
}
}
存储库接口和类:
public interface IContactsRepository
{
IEnumerable<ContactDTO> GetAllContacts();
}
类:
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();
到Global.asax 文件,并在Bootstrapper.cs 中添加:
container.RegisterType<IContactsRepository, ContactsRepository>();
但是,当我尝试通过 url 访问联系人时出现错误:
尝试创建类型控制器时出错 '联系人控制器'。确保控制器具有 无参数的公共构造函数。
我错过了什么吗?
【问题讨论】:
-
Unity通常有一个类,在应用加载的时候调用,放在app start?基本上我认为你还没有设置你的依赖解析器使用统一......所以当解析器尝试解析控制器时它不能......
-
是的,Bootstrapper.Initialise();正在做这项工作
-
这是您应该使用的package from nuget
-
看,应该没有初始化,因为它是在加载应用程序时引导的——而不是在运行 global.asax 时
-
嗯.. 我可能没有考虑到这一点,但只需添加一个空的、无参数的 ctor 吗?
标签: c# asp.net asp.net-mvc dependency-injection unity-container