2010-06-07 3 views
3

Я прочитал все вопросы, которые я могу найти по вопросам создания импорта, не экспортируя содержащий класс, но я не могу найти решение моей проблемы. Кто-нибудь знает способ добиться того, что я пытаюсь сделать?Проблемы с созданием импорта MEF

Модные сборки имеют формы и классы, которые они используют внутри. Эти формы должны иметь доступ к некоторым из экспортированных контрактов, но импорт не загружены, поскольку они не находятся в МЭФ «композиции дерева»

сборки Ведущий: сборочный

public class Host 
{ 
    public Host() 
    { /* Compose parts here... */ } 

    [Export(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } 

    [Export(typeof(IModule))] 
    public List<IModule> LoadedModules { get; set; } 
} 

Модуль:

[Export(typeof(IModule))] 
public class Module : IModule 
{   
    public Module() { } 

    public void DoSomething() 
    { 
     SubForm sub = new SubForm(); 
     sub.ShowDialog(); 
    } 

    [Import(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } // This works here 
} 

public class SubForm : Form 
{   
    public SubForm() 
    { } 

    [Import(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } // This doesn't work in here 
} 

Насколько я могу судить, мои варианты:

  1. Передача параметров конструкторам (боль)
  2. Использовать фиктивный экспорт на классы, требующие импорта, удовлетворяющие требованиям?

Любые другие?

ответ

3

В вашем конкретном случае я бы просто экспортировал SubForm в качестве своего конкретного типа и импортировал в модуль. В этом случае весь его импорт будет удовлетворен. Хотя, если вы хотите позвонить DoSomething более одного раза, вы столкнетесь с проблемами.

Другой способ, которым люди иногда это делают, - это вручную добавить CompositionContainer к себе по контракту ICompositionService на вашем хосте, а затем импортировать модуль ICompositionService, а затем каждый раз, когда вы создаете SubForm, вы просто передаете экземпляр объекта в ICompositionService.SatisifyImportsOnce для получить его Импорт удовлетворен.

Смежные вопросы