Я создаю структуру для добавления плагинов в мое приложение. Каждый плагин должен реализовывать абстрактный класс. Затем каждый плагин компилируется как DLL, которую основное приложение может найти с помощью Directory.GetFiles(myPath, "*.dll")
Все это работает плавно, и я могу создавать свои плагины в основном приложении и использовать их. Каждый плагин в основном представляет собой виджет панели инструментов, который пользователь может добавить на свою панель инструментов, чтобы показать ему некоторые графики или диаграммы. Это означает, что у каждого плагина есть таймер, и при каждом событии таймера он обновляет график данными из базы данных SQL приложения.
Итак, мой вопрос: куда мне поставить SqlConnection
? Создать один SqlConnection
и передать его в качестве параметра каждому плагину или передать строку подключения, и каждый плагин создаст свой собственный SqlConnection
?
Если я передам SqlConnection
приложения плагину, то я полагаю, что это потребует некоторого управления соединением внутри плагина. Я, очевидно, должен проверить, что он открыт, и что мне делать, если его состояние ConnectionState.Fetching
или ConnectionState.Executing
? Это только кажется громоздким.
Но, с другой стороны, учитывая, что приложение будет запущено несколькими пользователями, и у каждого пользователя может быть несколько плагинов, выбранных на его панели инструментов, в сумме это может составить SqlConnections
. Это желательно? Должен ли я рассмотреть третий вариант, когда плагин отправляет свой запрос хосту, который ставит его в очередь с другими запросами от других плагинов и возвращает набор результатов плагину после выполнения запроса? Таким образом, по крайней мере, у каждого пользователя будет только один SqlConnection
, независимо от того, сколько плагинов он выбрал.
Честно говоря, этот последний вариант кажется мне довольно сложным, и я пока не совсем уверен, как бы я его реализовал. Если бы кто-нибудь мог указать мне на статью, которая объясняет что-то подобное, я был бы очень признателен.