我想构建一个监控服务器并检查ping,响应时间等的基础架构 问题是未来的检查(例如:存在某个文件)将被添加,而无需重新编译基础结构。
如何以这样的方式构建它,使我能够附加具有不同功能的继承类,并在不重新编译的情况下执行它们?
谢谢!
答案 0 :(得分:3)
除了创建接口并为新库定义单个入口点之外,您还可以创建一个属性,用于标识需要加载的类或需要调用的方法。然后使用反射查看特定路径中的所有DLL,并实例化/运行包含属性的任何内容。
我已经构建了一个类似的应用程序,它必须在系统上执行许多运行状况检查,并且需要是可扩展的。应用程序启动,查看指定路径中的所有DLL,并使用'TestAttribute'装饰为每个类创建一个实例并运行'Execute'方法。
使用属性意味着您不需要指定要处理的DLL(不需要在config / database中),因为处理每个DLL都是安全的,只有那些用该属性修饰的DLL才会任何东西。
答案 1 :(得分:1)
实现一个界面和provider pattern,然后你可以插入你喜欢的任何东西。 MSBuild就是一个很好的例子,通过简单的界面,您可以将任何类型的任务添加到构建过程中 - 遵循相同的模式。
答案 2 :(得分:1)
听起来你可以使用某种'插件'机制。定义一个基本界面,您可以将每个“检查/操作”编译到一个单独的程序集中。从文件动态加载所有程序集并调用通过定义的接口执行检查/操作。
对于初学者来说,界面可能就像这样简单:
public interface IMonitorAction
{
bool Exectute();
}
此基础结构允许您通过创建另一个实现现有接口旁边的接口的程序集文件来添加更多检查。
答案 3 :(得分:0)
我的头顶。
我认为您可以重新启动您的应用程序。 有一个文件列出要加载的所有DLL,以实现您所需的功能。每个DLL应具有相同的名称入口点。加载每个DLL,调用方法,卸载DLL。循环。
警告:我从来没有做过这样的事情,所以我可能会说热风。答案 4 :(得分:0)
添加到@slugsters answer,而不是构建自己的可扩展性基础结构,请查看MEF等可扩展性库。