Можете ли вы активировать систему модуля Prism из службы WCF? Потому что независимо от того, что я делаю, мои MEF-зависимости не выполняются.Система модуля Prism из службы WCF?
Например:
Это мой WCF сервис реализация
public class MyService : IMyServiceContract{
// This should get filled by MEF after Prism loads the required modules
[Import]
IDatabase db;
public MyService(){
var bootsrapper = new MyServiceBoostrapper();
bootsrapper.Run();
}
}
Это мой Prism boostrapper с MEF вкусом:
public class MyServiceBoostrapper : MefBootstrapper
{
protected override void ConfigureContainer()
{
base.ConfigureContainer();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
// TODO: Add this assembly ... don't know why
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(MyServiceBoostrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(IDatabase).Assembly));
// This is what provides the service
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(DatabaseImpl).Assembly));
}
protected override DependencyObject CreateShell()
{
// we don't need the shell
return null;
}
}
Вот мой модуль что содержит интерфейсов для базы данных службы Prism:
[ModuleExport(typeof(IDatabase))]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this module simply provides the API.
}
}
public interface IDatabase
{
// interface methods here ...
}
и, наконец, вот службы Prism базы сами:
[ModuleExport(typeof(DatabaseImpl), DependsOnModuleNames = new string[] { "IDatabase" })]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this is a library module.
}
}
[Export(typeof(IDatabase))]
public class DatabaseImpl : IDatabase
{
/// implementation here ...
}
Пробовал это в течение последних нескольких часов без успеха. Мой db
импорт всегда null
и никогда не инициализируется.
Обратите внимание, что все работает, если я делаю все это без призмы, но только с MEF.
А как насчет прогресса в этом вопросе? –
Я думаю, что нашел решение в книге «Инъекция зависимостей в .NET» (часть 3, глава 7.3). Все еще проверяю это. В основном, это просто вопрос подключения к процедуре запуска WCF. – drozzy
Как я уже сказал в своем комментарии. Я действительно думаю, что это проблема настройки вашего контейнера и регистрации типов ... –