简体   繁体   中英

Using Unity in ASP.NET MVC 4 - Dependency injection error

I'm trying to inject a dependency into a web api controller using Unity.

I followed

http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection

closely, however I still get error while instantiating constructor, there there's no parameterless constructor.

Controller:

public class ContactsController : ApiController
    {
        IContactsRepository repository;

        public ContactsController(IContactsRepository repository)
        {
            this.repository = repository;
        }

        public List<ContactDTO> GetAllContacts()
        {
            return repository.GetAllContacts().ToList();
        }
    }

Repository interface and class:

   public interface IContactsRepository
    {
        IEnumerable<ContactDTO> GetAllContacts();
    }

Class:

public class ContactsRepository : IContactsRepository
    {
        public IEnumerable<ContactDTO> GetAllContacts()
        {
            using (var db = new ContactDatabaseEntities())
            {
                foreach (var contact in db.Contacts)
                {
                    yield return contact.Convert();
                }
            }
        }
    }

I added the line:

Bootstrapper.Initialise();

to Global.asax file, and in Bootstrapper.cs I added:

container.RegisterType<IContactsRepository, ContactsRepository>();

However when i try to access contacts through the url I get the error:

An error occurred when trying to create a controller of type 'ContactsController'. Make sure that the controller has a parameterless public constructor.

Am I missing something?

I see you are using ApiController - for WebAPI dependency injection is implemented in different way. You are referring to a standard MVC way of resolving dependencies, which won't work for WebAPI.

You need to install Unity.WebAPI package to get it working NuGet

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM