2016-07-07 1 views
0

Я использую Unity Dependency Injection, и у меня проблемы с ним. Я зарегистрировал свои интерфейсы и классы следующим образом:Unity - текущий тип интерфейса и не может быть сконструирован. Вам не хватает картографирования типов?

container.RegisterType<IUserService, UserService>(); 

где контейнер является контейнером IUnityContainer.

В моем контроллере у меня есть настройки конструктора принять в параметре IUserService как так:

private readonly IUserService _service; 

    public DependencyController(IUserService service) 
    { 
     _service = service; 
    } 

Когда ссылку на странице, которая направлена ​​на индекс этого контроллера ударил, я получаю следующее ошибка:

«Текущий тип, Converge.Service.Interfaces.IUserService, является интерфейсом и не может быть сконструирован. Вам не хватает сопоставления типов?». Не знаю, чего я могу потерять. Любая помощь очень ценится? Если вам нужна дополнительная информация, дайте мне знать.

UPDATE Вот класс UnityConfig

public class UnityConfig 
{ 
    private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(() => 
    { 
     var container = new UnityContainer(); 

     RegisterTypes(container); 

     return container; 
    }); 

    public static IUnityContainer GetConfiguredContainer() 
    { 
     return Container.Value; 
    } 

    private static void RegisterTypes(IUnityContainer container) 
    { 
     new ServiceInjection() 
      .Inject(container); 
    } 
} 

public class ServiceInjection 
    { 
     public void Inject(IUnityContainer container) 
     { 
      container.RegisterType<IUserService, UserService>(); 
     } 
    } 
+0

Просьба показать код из вашего корня композиции (код запуска, связывающий контейнер с MVC). – NightOwl888

+0

Вы уверены, что метод 'Inject' называется? похоже, что ваш регистрационный код контейнера не исполняется – Backs

+0

да, его называют. Вступил в это. –

ответ

0

ИТАК после небольшого поиска и создания других проектов, я понял, что происходит. Просто глупая ошибка. Мой класс ServiceInjection находился в отдельной dll. Когда я добавил Unity DI через диспетчер пакетов, он добавил папку App_Start в основном проекте и в DLL Injection. Я забыл удалить папку и содержимое App_Start из dll ServiceInjection. Как только эта папка была удалена, все работало должным образом.

0

Я знаю, что это старый, но в случае, если кто-то сталкивается с этим - я получил ту же ошибку, когда добавил службу и менеджер (и интерфейсы для них), но не зарегистрировал эти интерфейсы в своей зависимости Конфигурация впрыска. Если вы получите эту ошибку, убедитесь, что ваши новые интерфейсы на самом деле вставляются!