Лучшие практики для реализации стратегии надстройки / надстройки / плагина

Мое приложение должно быть расширяемым. Для своих собственных нужд я внедрил некоторые услуги. Эти услуги основаны на принципе IoC/DI. Таким образом, сервисы инкапсулируют концепцию приложения.

Например, существует служба IApplicationService. Служба ApplicationService предоставляет информацию о текущем приложении-исключателе. Там указываются AssemblyInfo и пр. Другим примером является INavigationService(см. Mef.codeplexcom в примерах). Этот сервис предоставляет некоторые свойства, в которых указывается информация о текущем выбранном элементе, а также некоторые события.

Я думаю, что "сервисный подход" является самым простым и упрощает точки расширения для приложения. Поэтому я не уверен, что это действительно лучший подход. Как вы думаете? Как бы вы реализовали "точки расширения" в приложении, например, надстройки / надстройки / плагины...?

Заранее спасибо за ваши ответы! И извините, мой английский плохой.;)

3 ответа

Вы знакомы с MEF (Managed Extensibility Framework)?

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

Вы должны серьезно взглянуть на MEF - структуру управляемой расширяемости.

Это отличный новый фреймворк, который сама Microsoft использует, например, в Visual Studio 2010 для своей истории расширения. Отличный и простой в использовании - зачем изобретать велосипед, если вы можете использовать то, что вскоре будут использовать тысячи разработчиков??

Да, я знаком с MEF. Я также использую концепцию MEF, но есть некоторые недостатки. Мое приложение похоже на IoC/DI и вместе с MEF немного сложнее. MEF на самом деле не является контейнером DI, поэтому использование MEF с другим контейнером DI (например, ninject, unity,...) затрудняет это. Я не буду использовать MEF с другими контейнерами DI. Поэтому смешивать MEF с другими контейнерами DI не очень хорошо.

Я надеюсь, вы понимаете мою озабоченность.

Дополнение: невозможно загрузить расширения в домен приложения в MEF. Так что это для моих нужд не хорошо. System.AddIn или MAF поддерживает это, но я не буду использовать System.AddIn, потому что это очень тяжело....

Другие вопросы по тегам