Единство не разрешает зарегистрированную зависимость .. даже если она действительно зарегистрирована - PullRequest
1 голос
/ 16 июня 2010

Это сводит меня с ума ...

Две сборки / проекты в игре:

Проект инфраструктуры, в котором есть интерфейс:

  IDtoMapping<in TDto, out TDomain>

И проект приложения, ссылающийся на Infx, с реализацией:

  PatientMapping : IPatientMapping

... и интерфейс маркера, просто для ясности:

  public interface IPatientMapping : IDtoMapping<PatientDTO, Patient> {}

Когда приложение загружается, запускается:

_container.RegisterType<IPatientMapping, PatientMapping> ( new ContainerControlledLifetimeManager () );

Это происходит в проекте приложения через процесс начальной загрузки всей системы.(Сразу после запуска этой строки (через часы) я могу успешно разрешить ее.)

Наконец, мы пытаемся разрешить ее (в службе WCF, в проекте приложения)

public PatientService ( 
    IPatientRepository patientRepository, 
    ISessionSource session,
    IPatientMapping patientDtoToDomainMapper )
{

.. и это не удается.С помощью ResolutionFailedException «Не удается создать экземпляр интерфейса и т. Д.» Я установил точки останова при вызове .Resolve, при регистрации и т. Д. Все попадает, как и ожидалось.Но когда приложение пытается разрешить / построить службу WCF, Unity не может разрешить параметр IPatientMapping ... он как бы забыл.

Я в растерянности .. Я обновился до Unity 2.0, добавилэтот промежуточный маркерный интерфейс удалил общий интерфейс и просто использовал ванильный ... все безрезультатно.Другие зависимости в системе разрешаются очень хорошо, включая другие параметры в том же конструкторе WCF.

Единственное, что мне говорит моя интуиция, может ли это иметь какое-то отношение к сборкам?То, что вызов .Resolve происходит в проекте Infx, но реализация фактически живет в app-проекте?Во время выполнения все сборки загружаются, так что это не должно иметь большого значения, верно?

Спасибо за любые идеи!

...