API バージョン番号に基づいて内部ルーティングを容易にするために使用している辞書があります。基本的に何が起こるかというと、辞書を調べて操作し、その RUN メソッドを呼び出そうとします。しかし、これを行うには、オブジェクトをそのインターフェイスにキャストできる必要があります。これが私が言いたいことです、これは辞書です:
public Dictionary<string, Type> Routing = new Dictionary<string, Type>();
public VersionRouter()
{
Routing.Add("1.0", typeof(OperationV1<RequestObjectV1, ResponseObjectV1>));
Routing.Add("2.0", typeof(OperationV1<RequestObjectV2, ResponseObjectV1>));
Routing.Add("3.0", typeof(OperationV1<RequestObjectV2, ResponseObjectV2>));
}
次のように、インスタンス化したい正しいタイプを取得できます。
var myOperation = Routing["2.0"];
そして、通常の状況では、次のようにインスタンス化してキャストします。
var myInstance = (MyInterface) Activator.CreateInstance(myOperation);
ただし、リクエストとレスポンスのタイプが何であるかを知る必要があるため、インターフェースは汎用です。
var myInstance = (MyInterface<TRequest, TResponse>) Activator.CreateInstance(myOperation);
この段階で、これらのリクエストとレスポンスのタイプが何であるかを伝える方法がわかりません。リフレクションでできると思います。myOperation.GetGenericArguments() のようなものを介してこれらの汎用パラメーターを取得できることがわかりましたが、この段階でそれを有利に使用する方法がわかりません。誰もこれを行う方法を知っていますか?