2015-05-11 2 views
0

Я имею эту конфигурацию с Unity и призмой:авторегистрации с Unity и Prism не работает

public class EmployeeDataService : IEmployeeDataService 
{ 
} 
public class EmployeeController(IEmployeeDataService dataService) 
{ 
    this.dataService = dataService; 
} 

public class EmployeeModuleInit : IModule 
{ 
    readonly IUnityContainer container; 
    readonly IRegionManager regionManager; 
    readonly EmployeeController employeeController; 

    public EmployeeModuleInit(IUnityContainer container, IRegionManager regionManager, EmployeeController employeeController) 
    { 
     this.container  = container; 
     this.regionManager = regionManager; 
     this.employeeController = employeeController; 
    } 
} 

типы отображаются с помощью:

Container.RegisterTypes(AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.TypeName, 
    WithLifetime.Transient); 

Тем не менее, при запуске я нахожусь получаю эту ошибку:

{ «текущий типа, IEmployeeDataService, является интерфейсом и не может быть построен вы не нашли отображение типа?»}

IUnityContainer и IRegionManager правильно зарегистрированы и разрешены, однако они зарегистрированы вручную в Prism.UnityExtensions.UnityBootstrapper.cs, и я не хочу вручную регистрировать все типы в проекте.

Любые идеи, как это решить?

Спасибо, Daniel

ответ

0

что регистрация по соглашению регистрирует все типы с именем. Я думаю, вы, вероятно, хотели этого вместо этого ...

Container.RegisterTypes(AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.Default, 
    WithLifetime.Transient); 
+0

Это частично верно. Контейнер может обнаруживать и регистрировать типы, используя указанную выше конфигурацию **, только **, если интерфейсы и типы реализации находятся в одной и той же сборке. В моем случае некоторые интерфейсы находятся в другой сборке, и регистрация все еще не работает. – bdaniel7

+1

Возможно, сборка интерфейса еще не загружена. 'AllClasses.FromLoadedAssemblies()' будет только извлекать из сборок, которые были загружены средой выполнения. Для целей отладки попробуйте вызвать 'Assembly.Load (« InterfaceAssembly, Version = 1.0.0.0 ») перед вызовом Unity, чтобы узнать, не является ли это проблемой. – TylerOhlsen

+0

Хорошо, ref. 'FromLoadedAssemblies()', я так думал. Но я изменил это на «AllClasses.FromAssembliesInBasePath()» и загрузил только сборки, специфичные для моего проекта. И это та же ошибка. Затем я явно загрузил сборку, содержащую интерфейсы, и снова ту же ошибку. – bdaniel7

Смежные вопросы