Мое приложение должно быть расширяемым. Для моих собственных нужд я реализую некоторые сервисы. Эти службы основаны на принципе IoC/DI. Таким образом, службы инкапсулируют концепцию приложения.Рекомендации по реализации стратегии addin/addon/plugin
Для примера используется служба IApplicationService. ApplicationService предоставляет информацию о текущем exceuting приложении. Указаны AssemblyInfo и т. Д. Другим примером является INavigationService (см. Mef.codeplexcom в образцах). Эти службы предоставляют некоторые свойства, где указаны информация о текущем выбранном элементе, а также некоторые события.
Я думаю, что «сервисный подход» является самым простым и упрощает точки расширения для приложения. Поэтому я не уверен, что это действительно лучший подход. Как вы думаете? Как реализовать «точки расширения» в приложении, например, addins/addons/plugins ...?
Заранее благодарю за ваши ответы! И извините, мой английский плохой. ;)
Если вы хотите добавить информацию, пожалуйста ** обновите ** свое исходное сообщение, отредактировав его - не добавляйте свой собственный ответ - затрудняет его выполнение ... –
Да, MEF ** ** ** DI - поскольку его работа отличается от контейнера DI. Но я не согласен - смешивание MEF и контейнера DI (например, StructureMap или Unity) действительно не так сложно и может быть сделано довольно хорошо. Возможно, вам нужно будет объяснить более подробно, почему вы не думаете, что это сработает для oyu ..... –
Управление загрузкой в AppDomain является нетривиальным, и я не думаю, что большинство инфраструктур DI также справятся с этим. Все ваши сервисы должны быть проксимированы, чтобы пересечь границу AppDomain, что также означает, что все классы, которые проходят туда и обратно, должны быть либо MarshalByRef, либо Serializable.Вы можете подумать о наличии одной категории «доверенных» расширений (без маршалинга) и другой категории «ненадежных» расширений, которые получают доступ только к ограниченному числу услуг с маршалированием. –