Как импортировать деталь, передав параметр экспортеру в MEF? - PullRequest
2 голосов
/ 11 декабря 2010

Большую часть времени мы импортируем экспорт безоговорочно. Я хочу импортировать некоторые конфигурации. как то так:

[Import(typeof(System.Configuration.Configuration))]
private Configuration config
{
    get;
    set;
}

Проблема на стороне экспорта. Мне нужно передать параметр, чтобы получить правильную конфигурацию. Вот экспортируемая функция:

[Export(typeof(System.Configuration.Configuration))]
private Configuration GetConfig(String name)
{
    // Load proper configuration and return it
}

У меня вопрос, как передать параметр со стороны импорта в экспортируемую функцию. Обратите внимание, что я использую экспортированную функцию (которая принимает параметр) внутри конструктора моего импортера.

1 Ответ

6 голосов
/ 12 декабря 2010

Что вы можете сделать, это использовать Func<T, U>, и MEF будет обрабатывать делегат за вас.Например:

public class FirstClass
{
  [Export("Method")]
  public string Method(string arg)
  {
    return arg.ToUpperInvariant();
  }
}

public class SecondClass
{
  [Import("Method")]
  public Func<string, string> Func;
}

В этом примере я экспортирую именованный контракт, и MEF автоматически определит, как подключить целевой делегат для меня.Я мог бы также Export изменить как Func<string, string>.

Так что в вашем случае я бы изменил ваш Export на:

[Export("GetConfiguration")]

И ваше Import и целевое свойствоto:

[Import("GetConfiguration")]
public Func<string, Configuration> GetConfig { get; set; }

И просто используйте делегата для выполнения импортированной функции.

Надеюсь, это поможет.

...