1. オブジェクト応答をパラメーターとして持つ関数 DoSomeService があります。応答は異なるクラスであり、実行時に動的に使用するクラスを内部コードが決定します。
2. 応答クラスの型を取り込んで検証する汎用の Fluent Validator< T> があります。
これで、型チェックを 1 つずつ実行できます。
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> の構造を改善するにはどうすればよいですか?
基本の Service クラスと DoSomeService 関数のシグネチャは変更できないことに注意してください。これはサードパーティ パッケージのオーバーライド関数です。