Ленивая нагрузка с MEF? - PullRequest
2 голосов
/ 24 июня 2010

Посмотрите на этот код:

public class Program
{
[import]IMain Main {get; set;}
...
private Compose() {...}
}

internal interface IMain
{
...
}

[Export(typeof(IMain)]
public class Main : IMain
{
  [import]
  Interace1 Object1 {get;set;}

  [import]
  Interace2 Object2 {get;set;}
}
...

Я хочу лениво загрузить Object2 после композиции между Program и Main. Когда я сочиняю в Программе, у меня возникает ошибка MEF, потому что MEF также пытается составить Object2 (но реализация Interface2 недоступна в начале ... Я хочу загрузить ее после).

Как я могу это сделать?

Я пытался поставить:

 [import]
  Lazy<Interace2> Object2 {get;set;}

но у меня все та же проблема.

1 Ответ

4 голосов
/ 24 июня 2010

Используйте это:

[Import(AllowDefault=true, AllowRecomposition=true)]
Lazy<Interface2> Object2 {get;set;}

AllowDefault позволит композиции успешно работать, когда нет Interface2, а AllowRecomposition позволит вам добавить ее позже.В данном случае не имеет значения, используете ли вы свойство типа Lazy<Interface2> или просто Interface2.

...