個別のプロジェクト (モジュラー アーキテクチャ) として個別の領域を持つ MVC アプリケーションがあります。これらの各プロジェクトには、インターフェイスを実装する特定のコントローラーがあります。したがって、このコードを使用して、そのインターフェイスを実装するすべてのロード済みアセンブリを取得できます...
var type = typeof(IAreaRegistration);
var types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p))
.Where(i => i.IsInterface == false)
.ToList();
私の質問は、本質的にその型の新しいインスタンスをメモリにロードするActivator.CreateInstance()を使用せずに、クエリから見つかった各型でインターフェイス メソッドを実行するにはどうすればよいですか? 動作する次のコードがありますが、私が言ったように、新しいインスタンスを作成し、それが最善の方法だとは思いません。
foreach (var item in types)
{
var cls = Activator.CreateInstance(item) as IAreaRegistration;
// call interface members here...
}