Лучшие практики для реализации стратегии надстройки / надстройки / плагина
Мое приложение должно быть расширяемым. Для своих собственных нужд я внедрил некоторые услуги. Эти услуги основаны на принципе IoC/DI. Таким образом, сервисы инкапсулируют концепцию приложения.
Например, существует служба IApplicationService. Служба ApplicationService предоставляет информацию о текущем приложении-исключателе. Там указываются AssemblyInfo и пр. Другим примером является INavigationService(см. Mef.codeplexcom в примерах). Этот сервис предоставляет некоторые свойства, в которых указывается информация о текущем выбранном элементе, а также некоторые события.
Я думаю, что "сервисный подход" является самым простым и упрощает точки расширения для приложения. Поэтому я не уверен, что это действительно лучший подход. Как вы думаете? Как бы вы реализовали "точки расширения" в приложении, например, надстройки / надстройки / плагины...?
Заранее спасибо за ваши ответы! И извините, мой английский плохой.;)
3 ответа
Вы знакомы с MEF (Managed Extensibility Framework)?
Managed Extensibility Framework (или MEF для краткости) упрощает создание расширяемых приложений. MEF предлагает возможности обнаружения и компоновки, которые вы можете использовать для загрузки расширений приложений.
Вы должны серьезно взглянуть на MEF - структуру управляемой расширяемости.
- Обзор структуры управляемой расширяемости
- Создание составных приложений в.NET 4 с помощью инфраструктуры управляемой расширяемости
- MEF на Codeplex
Это отличный новый фреймворк, который сама 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, потому что это очень тяжело....