我必须开发一个监控传感器信息的系统,但将来可能会添加许多传感器.
也就是说,我们的想法是开发一个由应用程序框架组成的系统.传感器(因为它们中的每一个都具有通信和数据呈现特性)将作为插件添加到系统中.
我如何在C#上编码?这是组件驱动开发的情况吗?我应该使用动态库吗?
C#有大量的ad-hoc插件系统.使用C#(在代码项目中)在插件架构中描述了一个.一般方法是宿主应用程序发布带有接口的程序集.它通过一个文件夹进行枚举,并查找定义实现其接口并加载它们并实例化类的类的程序集.
在实践中,你想要做更多.最好是主机应用程序定义两个接口,IHost和IPlugIn.IHost接口提供插件可以订阅的服务.IPlugIn构建为IHost.
要加载插件,您应该做的不仅仅是获取插件.您应该枚举所有可加载的插件.每个构建它们.问他们是否可以跑.要求他们将API导出到主机中.要求他们从主机导入API.插件应该能够询问是否存在其他插件.
这样,插件可以通过提供更多API来扩展应用程序.
PlugIns应该包含事件.这种插件可以监视插件加载和卸载的过程.
在世界末日,你应该警告插件它们会消失.然后拿出来.
这将为您提供一个可以在一个小框架中编写的应用程序,如果您愿意,可以完全在插件中实现.
作为额外的好处,您还应该这样做,以便在插件文件夹中解析插件的快捷方式.这使您可以编写应用程序并将其交付给其他人.他们可以在他们的开发环境中创建一个插件,在应用程序的插件文件夹中创建它的快捷方式,而不必担心每次编译后的部署.
托管可扩展性框架(MEF)就是您所需要的.您也可以使用依赖注入容器,但这有点不是您所期望的,尽管它本身就是一个完全可行的解决方案.