Дизайн подключаемых модулей для приложения .NET

Я собираюсь переписать часть нашего приложения на C# (в настоящее время устаревший код VB6). Модуль, с которого я начинаю, отвечает за импорт данных из различных систем в нашу базу данных. Примерно 5-6 раз в год новый клиент просит нас написать новый импорт для той системы, которую он использует. В настоящее время это требует от нас выпускать новую версию нашего программного обеспечения для каждой новой опции импорта, которую мы добавляем в приложение.

Одна из целей перезаписи — заставить приложение поддерживать плагины. Каждый новый импорт может стать отдельной сборкой, которую хост-приложение распознает и позволит конечному пользователю взаимодействовать с ней. Мы надеемся, что это в некоторой степени упростит жизнь, поскольку мы можем просто поместить новую сборку в каталог, и она будет распознана и использована основным (хостовым) приложением.

Один из пунктов, с которым я борюсь, связан с различиями между вариантами импорта, которые мы в настоящее время поддерживаем. В некоторых случаях мы фактически позволяем пользователю указать каталог и прочитать все файлы в каталоге в нашу систему. В других случаях мы позволяем им указывать на один файл и импортировать его содержимое. Кроме того, некоторые импорты имеют ограничение диапазона дат, которое применяет пользователь, а другие нет.

Мой вопрос заключается в том, как я могу спроектировать приложение таким образом, чтобы обеспечить некоторую гибкость импорта, который мы создаем и поддерживаем, и в то же время реализовать общий интерфейс, который позволит хост-приложению легко распознавать плагины и параметры. что каждый выставляет пользователю?


person Tim Lentine    schedule 05.09.2008    source источник


Ответы (3)


Я бы порекомендовал вам взглянуть на Managed Add-In Framework, поставляемую с .NET 3.5. команда надстроек разместила несколько примеров и инструментов по адресу сайт CodePlex, а также..

person David Mohundro    schedule 05.09.2008

.Net 3.5 имеет пространство имен system.Addin.

В этой ветке также есть полезная информация для более старых версий фреймворка:
http://forums.devshed.com/net-development-87/system-plugin-532149.html

person Joel Coehoorn    schedule 05.09.2008

для теории взгляните на шаблон плагина в martin fowlers Patterns of Enterprise Application Architecture

интересный пример можно найти в этом руководстве: Архитектура плагинов с использованием C#

person Vitor Silva    schedule 05.09.2008