Прежде всего: вы все великолепны, я очень часто ищу на этом сайте ответы MEF.
Моя проблема заключается в следующем:
У меня есть несколько сборок со многими [Imports] вих и одно основное приложение, где происходит сборка.Теперь проблема в том, что эти Imports не «заполняются», они всегда остаются нулевыми.
Я попытался воспроизвести это поведение в простом небольшом проекте и придумал следующий исходный код.
Неужели я неправильно понимаю некоторые вещи о MEF?
Пожалуйста, помогите!Спасибо всем!
Интерфейсы сборки:
namespace Interfaces
{
public interface IClass1
{
void Trigger();
}
public interface IClass2
{
void Trigger();
}
public interface IClass3
{
void Trigger();
}
}
Библиотека сборки1:
namespace Library1
{
[Export(typeof(IClass1))]
public class Class1:IClass1
{
#region IClass1 Members
public void Trigger()
{
}
#endregion
}
}
Библиотека сборки2:
namespace Library2
{
[Export(typeof(IClass2))]
public class Class2:IClass2
{
[Import]
public IClass1 Class1 { get; set; }
public void Trigger()
{
}
}
}
В основной программеЯ собираю весь материал Mef, выполняя следующее:
namespace MEFTest
{
public class mefStart
{
public CompositionContainer Container { get; private set; }
public void Start()
{
AggregateCatalog catalog = new AggregateCatalog();
AssemblyCatalog assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly);
DirectoryCatalog directoryCatalog = new DirectoryCatalog(".", "Library*.dll");
catalog.Catalogs.Add(directoryCatalog);
catalog.Catalogs.Add(assemblyCatalog);
this.Container = new CompositionContainer(catalog);
CompositionBatch batch = new CompositionBatch();
batch.AddExportedValue(this.Container);
this.Container.Compose(batch);
this.Container.ComposeParts(this);
}
}
}
Но после этого следующий класс не заполняет ни одного импорта:
namespace MEFTest
{
public class Class3:IClass3
{
[Import]
public IClass1 Class1 { get; set; }
[Import]
public IClass2 Class2 { get; set; }
public void Trigger()
{
Class1.Trigger();
Class2.Trigger();
}
}
}
Когда я смотрю в контейнерЯ вижу, что IClass1 и ICLass2 были составлены.
Почему [Импорт] в Class3 не выполняется?Наверное, я что-то упустил полностью ...
Заранее всем спасибо за помощь!
Майкл