2015-01-27 5 views
1

В настоящее время я расширяю существующее приложение WPF, чтобы использовать различные расширения. Прежде всего иметь общую платформу пользовательского интерфейса, которая загружает плагины, которые разрабатываются конкретными командами, которые ее используют. Некоторые из этих расширений могут зависеть друг от друга (например, плагин управления деревьями и холст, где вы можете перетаскивать вещи из дерева). Возможно ли это (и целесообразно) делать с MEF?Возможно ли иметь плагин "bundles" с MEF?

Я думал об этом через общий интерфейс, который экспортируется плагинами, которые принадлежат друг другу, но я не уверен, что это хорошая практика для MEF.

ответ

1

Поскольку вы используете MEF для управления вашими зависимостями, опишите их со следующим принципом инверсии зависимостей.

Если один из ваших плагинов требуется еще один, чтобы работать должным образом, просто импортировать ее реализации:

public interface ITreePlugin {} 
public interface ICanvasPlugin {} 

[Export(typeof(ICanvasPlugin)] 
public class CanvasPlugin : ICanvasPlugin 
{ 
    // treePlugin must be imported 
    [ImportingConstructor] 
    public CanvasPlugin(ITreePlugin treePlugin) {} 

    // ... 
} 

Этот пример позволяет поставить любойITreePlugin реализацию в контейнере. Кроме того, для этого требуется .ITreePlugin Реализация для представления в контейнере (обратите внимание, что вы можете сделать необязательный импорт). Это ваш «плагин».

Не связывайте отдельные реализации плагинов вместе, потому что это делает использование MEF бессмысленным.

+0

Спасибо, это похоже на то, что я хотел достичь. Я знал, что я не должен связывать плагины напрямую, поэтому я хотел убедиться, что я делаю это так, как это предполагает MEF. – Lennart

Смежные вопросы