我正在创建一个框架,用于为我的应用程序添加插件。每个插件都必须实现一个抽象类。然后将每个插件编译为DLL文件,主应用程序可以使用
这一切都运作得很顺利,我可以在主应用程序中实例化我的插件并使用它们。每个插件基本上是一个仪表盘小部件,用户可以将其添加到其仪表板上以显示一些图形或图表。这意味着每个插件都有一个计时器,在每个计时器事件上,它会使用应用程序的SQL数据库中的数据刷新图形。
所以我的问题是,我应该把
如果我将应用程序的
但另一方面,考虑到多个用户将运行应用程序,并且每个用户可能选择了多个插件放在他的仪表板上,这可能会增加
老实说,这最后一个选项对我而言似乎相当复杂,我还不太确定如何实现它。如果有人能指向一篇解释类似内容的文章,我会非常感激。
Directory.GetFiles(myPath, "*.dll")
找到它们。这一切都运作得很顺利,我可以在主应用程序中实例化我的插件并使用它们。每个插件基本上是一个仪表盘小部件,用户可以将其添加到其仪表板上以显示一些图形或图表。这意味着每个插件都有一个计时器,在每个计时器事件上,它会使用应用程序的SQL数据库中的数据刷新图形。
所以我的问题是,我应该把
SqlConnection
放在哪里?我应该创建一个SqlConnection
并将其作为参数传递给每个插件,还是传递连接字符串并让每个插件创建自己的SqlConnection
?如果我将应用程序的
SqlConnection
传递给插件,那么我想这将涉及一些管理插件内连接的工作。我显然必须检查它是否打开,如果它的状态是ConnectionState.Fetching
或ConnectionState.Executing
怎么办?这似乎很笨重。但另一方面,考虑到多个用户将运行应用程序,并且每个用户可能选择了多个插件放在他的仪表板上,这可能会增加
SqlConnections
的数量。这是可取的吗?我应该考虑第三个选项,在这个选项中,插件将其查询发送给主机,主机将其与其他插件的查询排队,并在查询执行后向插件返回结果集?这样至少对于每个用户只有一个SqlConnection
,无论他们选择了多少插件。老实说,这最后一个选项对我而言似乎相当复杂,我还不太确定如何实现它。如果有人能指向一篇解释类似内容的文章,我会非常感激。
GenerateConnection()
方法推送到列表中的每个连接,并在插件处理完毕时检查列表中的每个连接是否已被处理。 - Joel Coehoorn