2017-05-05 4 views
0

3つの異なるDLLにコンパイルされる3つのC#プロジェクトを持つVisual Studioソリューションがあります。主なものをLogicと呼ぶことにしましょう。他の2つはオプションで、他のアプリケーションに含めることもできないこともできますが、メインDLLを含める必要があります。他の2つをLogic.EditorLogic.OptionalLogicと呼んでみましょう。どちらもメインDLL Logicに依存しています。リフレクション(C#)で他のサブライブラリにアクセス

一般にLogic.EditorLogic.OptionalLogicが通信しないため、これは私が必要とするアーキテクチャです。私は今、あるクラスのインスタンスで何かが発生した場合、Logic.OptionalLogicLogic.Editor.EditorWindowというクラスのstaticメソッドをLogic.Editorに呼び出したいという状況に遭遇しました。元のライブラリLogicは、イベントにまったく興味がありません。

私はリフレクションを使用すると考えていましたが、実際のライブラリ/アセンブリ/名前空間やクラスにアクセスする必要がある例のほとんどは、その型からメソッドを抽出できる必要があります。例えば

System.Reflection.Assembly.GetAssembly(System.Type type); 

はアクセスできませんアセンブリの種類を必要とし、

System.Type.GetType("Logic.Editor.EditorWindow"); 

nullを返し、Logic.Editorが見つからないおそらくので、私はそれにGetMethodを呼び出すことはできません。

既知の文字列以外ではアクセスできないリフレクションによってアセンブリ内のクラスから静的メソッドを取得することは可能ですか?それが見つかった場合は別のアセンブリを呼び出すこともできます(別のアセンブリが終了プロジェクト)?

私はC#4と.NET 3.5に制限されています。

+1

真剣に間違ったアプローチIMHO。 'Logic.OptionalLogic'から' Logic.Editor'への依存関係があるので、前者を後者を直接参照してください。そして、それらを完全に別々にしたいという理由が本当にある場合は、 'Logic'にオープンエンドのメッセージハブ(非常に単純なものでも)を実装してください。それで 'Logic.OptionalLogic'は加入者に通知することができ、' Logic.Editor'はイベントを購読することができ、彼らはお互いを知る必要はありません。 – decPL

+1

フィードバックいただきありがとうございます。私はこれらの行に沿って考えていましたが、そこに属していないLogicライブラリにコードを導入する考え方が嫌いでしたが、あなたが正しいと思います - 私はこれに正しい方法でアプローチしていません。 – Helena

答えて

0

delegateLogicに定義し、Logic.Editorに実装し、Logic.OptionalLogicで呼び出すことができます。 Logic.OptionalLogicにデリゲートセットがない場合は、呼び出さないでください。

+0

ありがとうございます、それはそのトリックを行うかもしれないアプローチです、はい。 – Helena

関連する問題