ソリューションフォルダ内の複数のアセンブリからインターフェイスを実装するインスタンス化されたクラスの列挙を取得したいと思います。いくつかのアセンブリ間でインターフェイスを実装するオブジェクトを取得します。
(これは理にかなっている場合)私は、次のフォルダ構造を有する:
したがってSolution
-SolutionFolder
- Project1
- class implementing interface I would like to find
- other classes
- Project2
- class implementing interface I would like to find
- other classes
-MainProject
- classes where my code is running in which I would like to retrieve the list of classes
、実装されているインタフェースがISettings
である場合、私はそのインターフェイスのIEnumerable<ISettings>
参照インスタンス化オブジェクトを希望。
:
IEnumerable<ISettings> configuration =
(from t in Assembly.GetAssembly(typeof(CLASSNAME-THAT-IMPLEMENTs-INTERFACE-HERE)).GetTypes()
where t.GetInterfaces().Contains(typeof(ISettings)) && t.GetConstructor(Type.EmptyTypes) != null
select (ISettings)Activator.CreateInstance(t)).ToList();
が、これは、単一のアセンブリであり、私は実際にクラス名を知ることができません。
リフレクションを使用してこれを達成できますか、それとももっと必要なものがありますか?
ありがとうございました。しかし、私のアセンブリは最初にアプリケーションドメインにロードされず、メインプロジェクトの再コンパイルを避けながら、追加のアセンブリをプラグインする必要があるかもしれません。(私が謝った最初の質問ではわかりませんでした。 – Dangerous
あなたの質問のコード、私の答えのコード、実行時の 'Assembly.Load'の組み合わせを使ってアセンブリをあなたのappdomainに動的に読み込むことができます。あなたのプラグインは、とにかく読み込んだ場合にのみ実行可能になります。 –