0

そのため、実行時にアセンブリを読み込んでおり、アセンブリの種類に応じてジェネリックも使用しています。適切な型を取得するために、各 DLL は、正しいジェネリック型でクラスをインスタンス化するファクトリを実装しています。

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

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

管理者権限がない場合、このコードは method.Invoke で失敗します。私が使用している方法で MethodInfo.Invoke を呼び出すには管理者が必要であるというのは正しいですか? DLL のコードにステップ ダウンしましたが、Factory へのこの呼び出しを通過することさえできません。

edit : 説明されていないターゲット DLL の依存関係があったことが判明しました。ただし、提案された MEF フレームワークのアイデアは気に入っています。

4

2 に答える 2

3

実行時にファクトリを作成するという問題を解決するために、あなたが使用している方法でリフレクションを使用するのは悪い考えです。結合を回避していないだけでなく(単一の型を参照するハードコードされた文字列を持っている)、傷の世界を開いています。このようなものはどれも強く型付けされていません。

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

于 2010-12-13T20:44:11.637 に答える
2

これは MethodInfo とは何の関係もありませんが、MethodInfo が行っている可能性が最も高いものです。問題のメソッドを呼び出して、管理者以外の環境で機能するかどうかを確認することで、これをテストできます。

于 2010-12-13T20:39:36.940 に答える