Автоматически распознавать звонящего в MEF - PullRequest
1 голос
/ 10 ноября 2010

Используя MEF из экспортера, можно ли выяснить, кто является импортером, используя метаданные?

Например, возможно ли это:

[Export("Config")]
String Config()
{
   if (importer.metedata["name"] == "Circle")
   return "R=10";
}

Таким образом, импортер не можетнужно передать что-то (его имя здесь), чтобы сообщить экспортеру, кто он.

1 Ответ

1 голос
/ 10 ноября 2010

Нет, вы не можете этого сделать.Это имеет больше смысла, чтобы сделать это:

[Export("Config")]
string GetConfigurationValue(string name)
{
   if (name == "Circle")
   {
       return "R=10";
   }
   throw new ArgumentException(
       string.Format("Unknown configuration value '{0}'", name));
}

И класс, который импортирует этот метод, мог бы выглядеть так:или System.Func) - это быстрый и грязный способ.

Лучше объявить интерфейс IConfigurationProvider и экспортировать его на уровне класса.Это имеет два преимущества:

  • в документации по интерфейсу можно документировать договор, с которым импортер и экспортер должны согласовать.
  • устраняет необходимость в этих надоедливых строках в атрибутах импорта / экспорта, заменяя их на typeof(IConfigurationProvider).
...