Mef составьте части для всех классов, присутствующих в сборке

1
public class ClassMerger
{         

    [Import(typeof(ITest))]
    public ITest pTest { get; set; }

    [Import(typeof(INewTest))]
    public INewTest ObjImportClass { get; set; }

    private AggregateCatalog catalog { get; set; }
    public static CompositionContainer container { get; set; }

    public void Compose()
    {
        DirectoryCatalog dc = new DirectoryCatalog(@" Debug");
        catalog = new AggregateCatalog(dc);
        AssemblyCatalog catalog1 = new AssemblyCatalog(Assembly.GetExecutingAssembly());
        catalog.Catalogs.Add(catalog1);
        container = new CompositionContainer(catalog);             
        container.ComposeParts(catalog);
    }        
}

В приведенном выше коде, когда я говорю container.composeparts (каталог), все мои интерфейсы (например, ITest) имеют значение null. Но когда я переписываю его как container.ComposeParts (это) детали составлены. Если да, то как я упоминаю мой контейнер для компоновки частей для всех классов, присутствующих в моей сборке.

Теги:
mef

1 ответ

2

Вы получаете нуль, потому что он никогда не попытается составить для вашего класса ClassMerger, а скорее для AssemblyCatalog, разрабатывая:

Когда вы говорите container.Composeparts (каталог); вы сообщаете MEF о создании деталей для украшенных свойств внутри вашего экземпляра AssemblyCatalog.

С другой стороны, когда вы указываете container.ComposeParts (это); вы сообщаете MEF о создании этих украшенных свойств в экземпляре класса ClassMerger, тем самым, наконец, обнаружив, что ваши свойства заполняются.

Обратите внимание, что контейнер = новый CompositionContainer (каталог); вы говорите MEF, где искать детали, которые могут удовлетворить ваши более поздние, загруженные, украшенные свойства при стрельбе. ComposeParts...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню