我有以下方法,它接收一个details对象,对其进行验证,将其转换为请求并使其入队。除了我遇到麻烦的验证请求之外,一切都很好。基本上,每个不同的详细信息对象都有不同的验证逻辑。我从通用约束中知道,Details对象必须具有BaseDetails的基类,并且从实际的通用参数中,我知道确切的派生类型,但是不知道如何使用这些写我的验证器类,以便它处理所有类型的细节:

private void Enqueue<TDetails, TRequest>(TDetails details)
   where TDetails: BaseDetails where TRequest: BaseRequest
{
  bool isValid = _validator.Validate(details);

  if (isValid)
  {
    TRequest request = ObjectMapper
      .CreateMappedMessage<TDetails, TRequest>(details);

    _queue.Enqueue(request);
  }
}

最佳答案

我认为您需要为TDetails的每个实现创建一个验证器类,该类知道如何验证该特定实现,然后让工厂为给定的TDetails实现生成正确的验证器,并让_validator获得正确的类以执行工作工厂并让类(class)进行验证。

显然,您可以在基类中进行一些常见的验证。

您可能最好对对象本身进行验证,而不是为每个TDetails实现创建一个单独的验证器...

关于c# - 使用泛型的新手多态性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2317292/

10-09 06:59