3つの異なるDLLにコンパイルされる3つのC#プロジェクトを持つVisual Studioソリューションがあります。主なものをLogic
と呼ぶことにしましょう。他の2つはオプションで、他のアプリケーションに含めることもできないこともできますが、メインDLLを含める必要があります。他の2つをLogic.Editor
とLogic.OptionalLogic
と呼んでみましょう。どちらもメインDLL Logic
に依存しています。リフレクション(C#)で他のサブライブラリにアクセス
一般にLogic.Editor
とLogic.OptionalLogic
が通信しないため、これは私が必要とするアーキテクチャです。私は今、あるクラスのインスタンスで何かが発生した場合、Logic.OptionalLogic
のLogic.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に制限されています。
真剣に間違ったアプローチIMHO。 'Logic.OptionalLogic'から' Logic.Editor'への依存関係があるので、前者を後者を直接参照してください。そして、それらを完全に別々にしたいという理由が本当にある場合は、 'Logic'にオープンエンドのメッセージハブ(非常に単純なものでも)を実装してください。それで 'Logic.OptionalLogic'は加入者に通知することができ、' Logic.Editor'はイベントを購読することができ、彼らはお互いを知る必要はありません。 – decPL
フィードバックいただきありがとうございます。私はこれらの行に沿って考えていましたが、そこに属していないLogicライブラリにコードを導入する考え方が嫌いでしたが、あなたが正しいと思います - 私はこれに正しい方法でアプローチしていません。 – Helena