Добавить комментарий - CodeHelper

Добавить комментарий

MEF – это механизм, который позволяет минимумом кода внедрить в проекты поддержку расширяемости (например, плагинов).

Скачать вместе с примерами и документацией можно здесь: http://www.codeplex.com/MEF Далее я приведу короткий пример из документации для лучшего понимания, что такое MEF.

Итак, что дает MEF? Рассмотрим первый пример из документации к проекту. Первый кусок кода описывает простое свойство, которое влияет на заголовок кнопки.

[Import(«ButtonCaption»)]
public String ButtonCaption
{
  get { return theButton.Content.ToString(); }
  set { theButton.Content = value; }
}

Обратите внимание, что это свойство помечается атрибутом [Import(«ButtonCaption»)]. Это, в своем роде, отметка того, где данные могут быть изменены через внешние расширения.

Далее определяется простейшее расширение:

public class ExampleStringProvider
{
  [Export(«ButtonCaption»)]
  public String providedCaption
  {
    get { return «MEF Hello World!!»; }
  }
}

Как видно из кода, в классе определен источник данных через [Export(«ButtonCaption»)], который указывает, что данный класс умеет устанавливать значения заголовка для кнопки.

В конце концов, оба куска кода смешиваются, для того, чтобы встретить друг друга:

public MyHelloWorld()
{
  InitializeComponent();
  CompositionContainer container =
             new CompositionContainer();
  container.AddComponent<MefHelloWorld.MyHelloWorld>(this);
  container.AddComponent(new
   ExampleStringProvider());
  container.Bind();
}

Данный код регистрирует взаимосвязанные компоненты в контейнере (composition container) и, вызовом метода Bind, производит связывание данных из расширения на имеющиеся свойство. Как вариант, класс расширения ExampleStringProvider можно заменить на другой класс, который предоставляет иной функционал, например, который вместо текста выводит дату:

    public class DateStringProvider
    {
      [Export(«ButtonCaption»)]
      public String providedCaption
      {
        get { return DateTime.Today.ToString(); }
      }
    }

Как видно из простого примера, MEF реализует механизм связывания данных во время исполнения кода посредством механизма отражения.

Взято с хабра

Внимание! Вы собираетесь отправить информацию от имени анонимного пользователя.
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.