2011-02-10 3 views
1

Я хочу выставить несколько методов (или интерфейсов) из моего приложения ERP, и мои клиенты хотят добавить свои собственные модули для достижения некоторой функциональности. Например, мы можем написать собственные модули надстройки для визуальной студии.Как разрешить внешние надстройки легко взаимодействовать с приложением .net 3.0?

Пожалуйста, дайте мне знать, как достичь этого.

+0

Сделайте google для подключаемых архитектур (часто классифицируемых как одна из реализаций принципа инверсии зависимостей). – StuartLC

ответ

0

Я полностью согласен с Роба, но позвольте мне немного расширить ответ Роба.

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

  2. Если вы решите реализовать свою собственную архитектуру плагинов, я настоятельно рекомендую вам использовать Microsoft patterns and practices Unity для создания экземпляров плагинов. Это устранит головную боль о том, как инициализировать плагины, потому что Unity будет заботиться о зависимостях, требуемых плагинами через конструкторы плагинов. Вам просто нужно объявить интерфейсы, которые вы хотите представить как API. Разработчики плагинов должны ссылаться только на эти интерфейсы в конструкторах плагинов. Unity довольно легкий и простой в использовании.

1

Моего быстрое предложение:

  1. Expose интерфейса (ы) с возможным Load() крючком/обратным
  2. Определения папки модуля
  3. Попытка загрузить() каждый узел в папке модуля
  4. После загрузки() ed, используйте функциональность по мере необходимости.
+0

И используйте 'CAS (Security Access Security)', чтобы создать безопасную изолированную область вокруг загруженных сборок. – decyclone

2

Возможно, вы захотите посмотреть что-то вроде MEF или Composite UI Application Block. Если вы хотите «сделай сам», основы являются:

  1. Определить интерфейс надстроек можно реализовать
  2. Укажите папку, в которой приложение будет искать надстроек
  3. Есть приложение Перечислим каждый узел в папке, указанной и
    1. Использование отражения для загрузки каждого типа из сборки
    2. Проверьте, чтобы увидеть, если тип реализует интерфейс, указанный в формуле (1)
    3. Ins tantiate каждый тип, который реализует интерфейс и вызвать метод «регистр», что интерфейс определяет

Сделав это, прежде чем я не могу не предупредить вас, что есть проблемы и пит-падает в получении этого права , Если вы можете использовать что-то вроде MEF для «тяжелого подъема» для вас, пойдите для него, так как это облегчает жизнь - гораздо лучше, если кто-то из Microsoft напишет вашу систему надстройки! =)

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