У меня возникли трудности с пониманием того, почему нам нужен ComposeExportedValue (objval) вместо использования атрибута [Export].MEF ComposeExportedValue vs Export attribute
У меня есть объект приложения, созданный в оболочке, и этот объект приложения должен быть введен в призматические модули.
public class ShellBootsrapper : MefBootstrapper
{
[Export(typeof(IMyApplication))]
public MyApplication myApp;
protected override DependencyObject CreateShell()
{
this.Container.ComposeExportedValue<IMyApplication>(myApp);
return this.Container.GetExportedValue<Shell>();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
myApp = new MyApplication();
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Module1.Module1).Assembly));
}
}
Модуль 1 может импортировать только если я использую ComposeExportedValue<IMyApplication>(myApp);
[ModuleExport(typeof(Module1))]
public class Module1 : IModule
{
private readonly IRegionManager regionManager;
[Import]
private IMyApplication myApp;
}
Я бы ожидал [Export] достаточно, но, видимо, не?
Edit: Я удалил public MyApplication myApp;
к shell.xaml.cs (более чувственный), из загрузчика и вещей получить работу. Я сделал вывод; В настоящее время разрабатывается состав MEF, и экспорт просто не работает. Вот почему призма внутренние L делают экспорт с ComposeExportedValue (объект Валом)
protected virtual void RegisterBootstrapperProvidedTypes()
{
this.Container.ComposeExportedValue<ILoggerFacade>(this.Logger);
this.Container.ComposeExportedValue<IModuleCatalog>(this.ModuleCatalog);
this.Container.ComposeExportedValue<IServiceLocator>(new MefServiceLocatorAdapter(this.Container));
this.Container.ComposeExportedValue<AggregateCatalog>(this.AggregateCatalog);
}
Я больше привык к тому, что модули вводятся в оболочку, а не наоборот. Вы действительно хотите вставить оболочку в модули? – Kryptos
Спасибо за предложение. У меня есть небольшие модульные бизнес-приложения, кроме модулей призмы. Каждый модуль призмы должен регистрировать свой собственный модуль/объект приложения для малого бизнеса для основного бизнес-приложения, живущего в оболочке. Мне легче отправить ограниченный интерфейс (только для регистрации бизнес-объектов) на модули Prism. Модули Prism регистрируют свои бизнес-модули в основном бизнес-приложении с помощью этого предоставленного интерфейса. В противном случае; Я должен экспортировать/отправить все бизнес-модули в оболочку, и это не похоже, упростит ситуацию. – freewill