У меня возникла проблема при получении информации из импортированного атрибута. Атрибут остается нулевым после вызова .ComposeParts(), но композиция в порядке, потому что после этого я могу вызвать .GetExportedValues () и получить необходимый экземпляр. Вот код:Вложение свойств MEF не происходит
Bootstrapper делает композицию
[Export]
public class Bootstrapper
{
public void Run()
{
doComposition();
}
private void doComposition()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog("./Applications"));
catalog.Catalogs.Add(new AssemblyCatalog(typeof(Loader).Assembly));
Container = new CompositionContainer(catalog);
// Apps = Container.GetExportedValues<IApplication>(); - this gets me the IApplication(s), but I dont understand why Apps isn't injected automatically
Container.ComposeParts(catalog);
IEnumerable<IApplication> app = Container.GetExportedValues<IApplication>();
}
public CompositionContainer Container { get; set; }
private IEnumerable<IApplication> apps;
[ImportMany(typeof(IApplication))]
public IEnumerable<IApplication> Apps
{
get { return apps; }
set
{
apps = value;
}
}
Подпись одного из классов, реализующих IApplication
[Export(typeof(IApplication))]
public class MDFApplication : IApplication {...}
Все указатели оценили, спасибо много.