после предыдущего вопроса, который я разместил на StackOverFlow, у меня есть следующая структура проекта для моего настольного приложения Prism.
Библиотека классов : Application.Common -> здесь содержатся все мои DTO и сервисные контракты, которые определены на моем сервисном уровне WCF, что является совершенно другим решением.
Модули: Application.Modules.ServicesModule -> здесь я добавил ссылки на мою реализацию WCF, используя Добавить ссылку на службу. Я также регистрирую реализации моих типов. IMyServiceContract определен в сборке Application.Common, поэтому метод инициализации выглядит следующим образом: -
public void Initialise()
{
_container.RegisterType<IMyService, MyServiceClient>(new InjectionConstructor());
}
Наконец, у меня есть другой модуль Application.Modules.FunctionalityModule , в котором есть конструктор, определенный следующим образом
public FunctionalityModule(IMyService myService){}
когда приложение пытается разрешить зависимость в FunctionalityModule во время выполнения, возникает следующая ошибка
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, AccountsSln.Common.ServiceContract.IMyService, is an interface and cannot be constructed. Are you missing a type mapping?
Обычно я видел эту ошибку, потому что зависимость не была зарегистрирована, но в этом случае я знаю, что она есть в ServicesModule. Это как-то связано с регистрацией в разных модулях? Есть ли другие предложения о том, как я могу реализовать структуру своего проекта для поддержки служб WCF в настольном приложении Prism?
Спасибо
Alex
Edit:
Поскольку я хотел использовать общую сборку для определения своих сервисных контрактов, у меня возникли проблемы при использовании Add Service Reference. Оказывается, что если вы используете Add Service Reference, сгенерированный код использует метаданные для создания типов на стороне клиента. Они имеют ту же подпись, что и в Общей сборке, но отличаются. Чтобы дать мне возможность использовать контракты в Общей сборке, я черпал вдохновение из этого поста http://xaml.geek.nz/working-slightly-smarter-with-wcf. Это заставило меня начать в правильном направлении, но я думаю, что мне нужно будет сделать код более подходящим для производственной среды.