MEF лучше всего подходит для соединения отдельных модулей.Немного излишне объединять объект, который должен находиться в одной логической иерархии.
Я бы одел свойство Child
, чтобы установить родителя:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(Parent))]
public class Parent
{
private Child _child1;
private Child _child2;
[Import(typeof(Child))]
public Child Child1
{
get { return _child1; }
set { _child1 = value; _child1.Parent = this; }
}
[Import(typeof(Child))]
public Child Child2
{
get { return _child2; }
set { _child2 = value; _child2.Parent = this; }
}
public string name;
}
Таким образом, когда импорт выполняется для создания потомков класса Parent
, классы Child
будутих ссылки Parent
также установлены.Этот способ связывания ссылок является MEF дружественным и довольно стандартным.Только не делайте этого в обоих направлениях (если у вас отношения один-к-одному), потому что вы получите бесконечный цикл.
Похоже, вы используете MEF за пределами установленной компетенции.В MEF для каждого имени контракта вы можете иметь одну одноэлементную ссылку или несколько ссылок одного типа.Единственный контекст, который имеет MEF, - это имя контракта (или название типа контракта).
Надеюсь, это поможет.