2010-12-13 19 views
0

実行時にアセンブリをロードしていますが、アセンブリタイプによってはジェネリックも使用しています。適切なタイプを取得するために、各DLLは、そこに存在すると予想されるファクトリを実装しています。このファクトリは、正しいジェネリック型のクラスをインスタンス化します。MethodInfo.InvokeにはWindows 7の管理者が必要ですか?

  Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory"); 
      MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static); 

      player = (IScenarioPlayer)method.Invoke(null, null); 

このコードはメソッドで失敗します。私は管理者特権を持っていません。これは、私がそれを使用している方法は、管理者が必要な方法MethodInfo.Invokeへの呼び出しは正しいですか?私はDLLのコードをステップダウンして、この呼び出しを工場に渡すことさえできません。

編集:説明されていないターゲットDLLの依存関係が判明しました。私はMEFフレームワークのアイデアが好きです。

+0

例外メッセージとスタックトレースを送信します。 –

答えて

2

これはMethodInfoとは関係ありませんが、MethodInfoが最も可能性の高いものです。問題のメソッドを呼び出し、非管理環境で動作するかどうかを調べることで、これをテストできます。

+0

これは私が最初にやったことの一つであっても実際に私の問題を解決する助けとなりました。ありがとう – Tom

3

リフレクションを使用する方法では、実行時にファクトリを作成する問題を解決することは悪い考えです。 ではなく、(あなたは単一のタイプを参照するハードコードされた文字列を持っています)、あなたは傷つく世界を開いています。このようなものは厳密に型指定されていません。

プラグイン可能なコンポーネントを作成する場合は、MEFのようなものをお勧めします。それはすでにあなたが直面している問題を解決します。はもっと速く、より速くより保守的な方法です。

+0

+1 MEF ...そしてその最初のクラスの市民でも.Net 4 –

+0

私はMEFを見ていきます、ありがとう – Tom

関連する問題