Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC 4中使用Unity-依赖项注入错误_C#_Asp.net_Asp.net Mvc_Dependency Injection_Unity Container - Fatal编程技术网

C# 在ASP.NET MVC 4中使用Unity-依赖项注入错误

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) {

我试图使用Unity将依赖项注入web api控制器

我跟着

不过,我在实例化构造函数时仍然会出错,因为并没有无参数的构造函数

控制器:

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>();