【问题标题】:Using Unity in ASP.NET MVC 4 - Dependency injection error在 ASP.NET MVC 4 中使用 Unity - 依赖注入错误
【发布时间】: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


【解决方案1】:

我看到你正在使用ApiController - 因为 WebAPI 依赖注入是以不同的方式实现的。您指的是一种标准的 MVC 解决依赖关系的方法,它不适用于 WebAPI。

你需要安装 Unity.WebAPI 包才能让它工作NuGet

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多