ルーティングAPIをオーバーホールしているカスタムMVCフレームワークがあります。私は、デリゲートとジェネリックを多用するフレームワークで「セットアップ」と「実行」を分離するためのクリーンな方法を考えようとしています。今、私はこれを呼び出し側から想像しています:
//setup
MyRouter.AddRoute("/foo", () => new MyHandler(), (h) => h.MyMethod);
//h.MyMethod only exists in MyHandler, not in HttpHandler
//execution
MyRouter.Execute(HttpContext);
現在、AddRouteメソッドのシグネチャを「機能」させることができます。
delegate T HandlerInvoker<T>();
delegate string HandlerCallMethod<T>(T handler);
...
public void AddRoute<T>(string pattern, HandlerInvoker<T> invoker, HandlerCallMethod<T> caller) where T is HttpHandler{...}
呼び出し元と呼び出し元を保存する必要がなく、問題なく実行できる場合は、これで問題ありません。ただし、後で実行するために、呼び出し元と呼び出し元を保存する必要があります。
私がやろうと思った現在のこと:
- それらをに保存し、
List<object>
リフレクションを使用してそれらを呼び出します。これは非常に複雑で、おそらくパフォーマンスがあまり良くないようです - 実行に移り
AddRoute
ます。これは私のAPIを使用する人々にとって困難になる可能性がありますが、私の唯一の「良い」選択になる可能性があります - SOの質問をする:)
これらの一般的なタイプを大量の苦痛な反省なしに保存する良い方法はありますか?