1. 我有一个以对象响应作为参数的函数 DoSomeService。响应是不同的类,内部代码决定在运行时动态使用哪一个。
2. 我有一个通用的 Fluent Validator<T>,它接受响应类的类型,然后对其进行验证。
现在,我可以一一进行类型检查:
public override void DoSomeService(object response) {
object validator = null;
if (response.GetType()==typeof(TypeA_Response)) validator= new Validator<TypeA_Response>();
if (response.GetType()==typeof(TypeB_Response)) validator= new Validator<TypeB_Response>();
if (response.GetType()==typeof(TypeC_Response)) validator= new Validator<TypeC_Response>();
//......
if (response.GetType()==typeof(TypeX_Response)) validator= new Validator<TypeX_Response>();
if (validator.IsValid) {
//do more stuff ...
}
}
但这并不好,尤其是当我有很多回复时。我想要一些简短而通用的东西。
//response could be TypeA_Response, TypeB_Response, TypeX_Response
public override void DoSomeService(object response) {
var validator = new Validator<T>();
if (validator.IsValid) {
//do more stuff ...
}
}
当然,这行不通,因为我需要为 Fluent Validator 定义 T。如何检测什么类型是“对象响应”并在运行时将其动态填充到 T 中?
或者我如何避免一起做这一切,并为我的验证器<T>提供更好的结构?
请注意,我无法更改基础服务类和 DoSomeService 函数签名,它是来自 3rd 方包的覆盖函数。