.NET で型が解決およびインスタンス化される方法を変更できますか?
-
09-06-2019 - |
質問
一部の言語では、「new」キーワードをオーバーライドして、型のインスタンス化方法を制御できます。.NET ではこれを直接行うことはできません。ただし、たとえば、「型が見つかりません」例外を処理し、その型を「新規作成」した人が爆発する前に手動で型を解決する方法はあるだろうかと疑問に思っていました。
XML ベースのファイルを読み取り、そのファイル内に記述されている型をインスタンス化するシリアライザーを使用しています。シリアライザーを制御することはできませんが、できれば独自の appdomain ホストを作成せずに、プロセスと対話したいと考えています。
代替のシリアル化方法を提案しないでください。
解決
イベント ハンドラーを AppDomain.CurrentDomain.AssemblyResolve にアタッチして、プロセスに参加できます。
EventHandler は、ResolveEventArgs で渡された型を担当するアセンブリを返す必要があります。
詳細については、次の URL で読むことができます。 MSDN
他のヒント
もあります。 AppDomain.TypeResolve オーバーライドできるイベント。
選択は壊れていません 別の見方をする方法について説明します。問題はツールではなく設計にある可能性があります。
「新しい」人に何か他のことをやらせようとするのは、間違ったアプローチになると思います。
演算子のオーバーロードを慎重に使用する必要がある理由を考えてください。これは直観に反し、言語セマンティクスに隠れた変更がある場合はデバッグが困難です。
一歩下がって、より大きな文脈で設計を観察し、問題を解決するためのより賢明な方法を見つけてください。
Reflection と Activator クラスをチェックしてください。これらを使用すると、文字列からオブジェクトを作成できるようになります。確かに、オブジェクトはアクセスできるアセンブリの 1 つに存在する必要があります。