2013-09-25 2 views
0

Чтобы динамически добавлять функциональные возможности приложения, я в значительной степени полагаюсь на MEF, который является отличным инструментом для предоставления интерфейсов для сторонних сборок (плагинов). Но теперь я не только хочу иметь общий интерфейс для плагинов, к которым я могу получить доступ из своего основного приложения, но также предлагать интерфейс для плагинов, через которые они могут обращаться к различным ресурсам (таким как объекты) из моего основного приложения. Как это можно сделать? Я думаю о чем-то вроде API плагинов, но я не уверен, что MEF предлагает такую ​​возможность.Общие ресурсы приложений в MEF

Есть два варианта, которые я имел в виду, для выполнения этой задачи:

  • Пасс объектов в качестве параметров на плагин конкретизации

Drawback: Если я прохожу позволяет сказать, например, экземпляр объекта ведения журнала, который я использую в другом месте, сторонний плагин может легко вызвать Dispose, что делает его непригодным для всего приложения или других плагинов. Очень опасно!

  • DECLARE глобально доступные статические методы

ответ

1

Вместо того, чтобы строить свои плагины или имеющие статические экземпляры где-то, вы можете использовать инъекции ...

Вы можете фактически вводить другие объекты ваш плагин. Чаще всего [ImportingConstructor].

Если вы другие объекты не реализуете экспорт MEF, возможно, вы не сможете использовать эту функцию MEF, если это так, вы также можете объединить, например. Unity с плагинами MEF, чтобы ваши плагины могли использовать контейнер единства для разрешения определенных вещей. Это немного сложно, но есть определенные решения. Существует старая, но все еще действительная запись в блоге, которую вы, возможно, захотите прочитать: http://pwlodek.blogspot.de/2009/05/unity-mef-integration-layer.html

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