私はプロトコルハンドラを構築しています。プロトコルは不明なリクエスト タイプのセットをサポートしている可能性があり、各リクエスト タイプを実装する単一のクラスを用意します。これらのリクエスト ハンドラ クラスは、基本ハンドラ クラスを拡張します。新しいリクエスト タイプをサポートするには、そのためのクラスを追加し、サービスを再コンパイル/デプロイ/再起動するだけでよいように、システムを構築しようとしています。
だから私はこのようなものを持っています:
foreach (Type classType in protocolAssembly.GetTypes())
{
if (classType.BaseType == typeof(ProtocolRequestHandler))
{
if (supportedRequestsMap.Contains(classType.Method))
{
// error: that method is already implemented!
}
supportedRequestsMap.Add(classType.Method, typeof(classType));
}
}
新しいクラスの追加は、サービスが処理するリクエスト メソッドが宣言されている限り、サービスの再起動時に取得されます。
プロパティMethodが実装される基本クラスProtocolRequestHandlerを介してコンパイル時に強制するにはどうすればよいですか? メソッドタイプを「Null」または「Unknown」として使用したり、例外をスローしたりしたくありません。また、サポートされているプロトコル要求タイプを拡張クラスの名前で本質的に指定したくありません (私は私が好きなクラス)。
プロパティの値が継承クラスに設定されていることを強制する方法はありますか?
この種の動的読み込みを行うためのよりクリーンな方法はありますか? 継承クラスのサポートされているメソッドを決定するために属性を使用する必要がありますか?