我正在建立一个协议处理程序。协议可能支持一组未知的请求类型,我将拥有一个实现每个请求类型的类。这些请求处理程序类将扩展基本处理程序类。为了支持新的请求类型,我正试图构建这样一个系统,我只需要为此添加一个类,然后重新编译/部署/重新启动服务。
所以我有这样的东西:

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强制实现属性方法?我不想将方法类型用作“null”或“unknown”,也不想抛出异常,而且我也不想在扩展类的名称中固有地指定受支持的协议请求类型(我想随意调用这些类)。
有什么方法可以强制属性在继承类中设置其值吗?
有没有一种更干净的方法来做这种动态加载?我是否应该使用属性来确定继承类的受支持方法?

最佳答案

您应该依赖接口作为插件应该实现哪些方法的契约。
here上可以找到一个(有点旧,但仍然很相关)不错的教程。

10-07 23:54