2008-09-16 6 views
0

一部の言語では、「new」キーワードをオーバーライドして、型のインスタンス化の方法を制御できます。これを.NETで直接行うことはできません。しかし、「タイプが見つかりません」という例外を処理し、手動でタイプを解決する方法があるかどうか疑問に思っていました。.NETで型を解決しインスタンス化する方法を変更できますか?

私はxmlベースのファイルを読み込み、その中に記述されている型をインスタンス化するシリアライザを使用しています。私はシリアライザを制御することはできませんが、私は自分のappdomainホストを書かずに、このプロセスとやりとりしたいと思っています。

代わりのシリアル化方法を提案しないでください。

答えて

5

イベントハンドラをAppDomain.CurrentDomain.AssemblyResolveに関連付けて、プロセスに参加させることができます。

EventHandlerは、ResolveEventArgsで渡された型を処理するアセンブリを返す必要があります。

あなたがオーバーライドすることができますAppDomain.TypeResolveイベントもありますMSDN

+0

注:これはMonoには問題があります。 – leppie

-1

ReflectionとActivatorクラスをチェックしてください。文字列からオブジェクトを作成することができます。許可されているオブジェクトは、アクセス権のあるアセンブリの1つになければなりません。

1

でそれについての詳細を読むことができます。

1

select isn't brokenでは、違った見方が議論されています。あなたのツールではなく、設計上の欠陥かもしれません。

私は「新しい」ものを他のものにすることを試みることが間違ったアプローチになると思います。

オペレータのオーバーロードを注意して使用する必要がある理由を考えてください。言語セマンティクスに隠された変更があるとデバッグが難しくなります。

大きな文脈で設計を見直して、問題を解決するより賢明な方法を見つけようとします。

+0

デシリアライゼーションが爆発する前に私が必要とするタイプを得ることを望んで、盲目的に見つけた全てのフリッグゲンアセンブリをロードしてロードするよりも、プロセスを助けることはよりエレガントだと思います。 – Will

+0

「すべてのアセンブリを盲目的に読み込む」べきではありません。それは問題の症状です。その症状に敏感ではないデザインを見つけてみてください。 – Anthony

関連する問題