我正在构建一个协议处理程序。该协议可能支持一组未知的请求类型,我将有一个实现每种请求类型的类。这些请求处理程序类将扩展一个基本处理程序类。我正在尝试构建系统,以便为了支持新的请求类型,我需要做的就是为此添加一个类并重新编译/部署/重新启动服务。
所以我有这样的事情:
foreach (Type classType in protocolAssembly.GetTypes())
{
if (classType.BaseType == typeof(ProtocolRequestHandler))
{
if (supportedRequestsMap.Contains(classType.Method))
{
// error: that method is already implemented!
}
supportedRequestsMap.Add(classType.Method, typeof(classType));
}
}
只要声明了它处理的请求方法,就会在服务重新启动时添加一个新类。
如何在编译时通过基类ProtocolRequestHandler强制实现属性Method?我不想将方法类型用作“Null”或“Unknown”,或者抛出异常,也不想在扩展类的名称中固有地指定支持的协议请求类型(我想调用我喜欢的课程)。
有什么方法可以强制一个属性在继承类中设置它的值?
有没有一种更简洁的方法可以进行这种动态加载?我应该使用属性来确定继承类的支持方法吗?