Лучшие практики для реализации стратегии надстройки / надстройки / плагина - PullRequest
5 голосов
/ 25 июля 2010

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 25 июля 2010

Вы знакомы с MEF (Управляемая структура расширяемости)?

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

2 голосов
/ 25 июля 2010

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

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

0 голосов
/ 25 июля 2010

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

Надеюсь, вы понимаете мою проблему.

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

...