【发布时间】:2009-07-02 06:14:37
【问题描述】:
我正在尝试找出插件的架构,但我从未使用过。本质上,我的程序支持多个数据库后端,但一次只支持一个。
我现在的想法是创建一个新的程序集(“.DataCore”),其中包含我所有的存储库接口(IFooRepository、IBarRepository)和一个 IDataPlugin 接口。然后,插件必须实现所有这些接口。
用户在 app.config 文件中指定所需程序集的名称。然后,我的程序将调用 DataCore 程序集中的一个函数,该函数又使用反射来加载所需的程序集。然后使用反射搜索实现 IDataPlugin 的类并调用 Initialize() 函数,该函数包含 Ninject 的所有 DI 绑定。
所以我的架构看起来像:
MyProgram => new DataCoreLoader(string assemblyName) => DesiredDataPlugin.Initialize()
我只是不确定这是否是正确的方法,以及我是否真的应该使用反射自己实现它。我猜有现有的框架?我简单地看了一下 MEF,但我不知道这是否有帮助?
我希望我的插件至少有一个可发现的类的原因是 a) 我想根据我的程序期望的值来检查 ProtocolVersion 编号,以检测过时的插件和 b) 我的配置工具应该提供所有的列表带有一些元数据的数据插件,如作者或描述。
永远不需要同时加载多个数据插件,但我正在寻找可以在其他领域实现这一点的东西(在应用程序的另一部分,我想使用订阅的插件我的应用程序发出的事件)。
【问题讨论】:
标签: .net plugins dependency-injection