Я новичок в MEF и пытаюсь использовать его для создания подключаемой системы, но застрял на первом этапе.
Я следую за статьей Эндрю Уайтчепела . Я скачал его пример кода, и он работает нормально (если вы удалите одну из «экспортирующих» сборок - они взаимоисключающие в его примере - и ссылаетесь на сборку MEF).
Пример иллюстрирует импорт отдельной детали. Я хочу импортировать несколько частей (все на основе одного интерфейса). Итак, я изменяю пример кода следующим образом:
[Import]
// OLD - public Interface.ICalculate Calculate { get; set; }
public IEnumerable<Interface.ICalculate> Calculators { get; set; }
// OLD - Console.WriteLine(
// OLD - String.Format("{0}", Calculate.Circumference(4)));
foreach (Interface.ICalculate calculator in Calculators)
{
Console.WriteLine(
String.Format("{0}", calculator.Circumference(4)));
}
Я также импортировал System.Collections.Generic для IEnumerable.
Смена ключа - первая. Насколько я понимаю, это позволит мне импортировать детали из нескольких сборок. Однако я получаю следующую ошибку:
No valid exports were found that match the constraint
На данный момент я даже не добавил несколько «плагиновых» сборок. Все еще только один.
Для полноты вот его определение экспорта (которое я не коснулся) в библиотеке классов «плагина»:
[Export(typeof(Interface.ICalculate))]
public class Calculate : Interface.ICalculate
Есть идеи? Я чешу голову здесь. Я искал SO и форумы MEF, но мог найти что-нибудь, чтобы просветить меня.
Я использую VS 2008 SP1 (бета-версия 2010 не установлена) и последнюю сборку System.ComponentModel.Composition (2009.26.8.0).