Прежде всего: Вы все отлично, я очень часто ищу этот сайт для ответов MEF.MEF Импортирование null
Моя проблема заключается в следующем:
У меня есть несколько сборок со многими [Импорт] в них и одно основное приложение, где происходит сборка. Теперь проблема в том, что эти Импорт не заполняются, они всегда остаются нулевыми.
Я попытался воспроизвести это поведение в простом маленьком проекте и придумал следующий исходный код.
Я пропустил некоторые вещи о MEF?
Пожалуйста, помогите! Спасибо вам всем!
Интерфейсы Сборочные:
namespace Interfaces
{
public interface IClass1
{
void Trigger();
}
public interface IClass2
{
void Trigger();
}
public interface IClass3
{
void Trigger();
}
}
Ассамблея Library1:
namespace Library1
{
[Export(typeof(IClass1))]
public class Class1:IClass1
{
#region IClass1 Members
public void Trigger()
{
}
#endregion
}
}
Ассамблея Library2:
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 были составлены.
Почему [Import] в Class3 не удовлетворены? Я думаю, что мне что-то не хватает ...
Спасибо вам за помощь!
Майкл
Ahh ОК - в противном случае я бы использовать SatisfyImportsOnce - правильно? – Michael
Почему вы не объявляете class3 в качестве экспорта и пусть MEF создает экземпляр класса3? если вы не хотите, чтобы вам нужен экземпляр CompositionContainer в вашем классе3, но я не думаю, что вам нужно – blindmeis
ОК - и как мне получить экземпляр класса3? – Michael