私はインターフェイスIExample
とクラスClassOne
とClassTwo
とClassThree
のセットを持っています。これらはすべて異なる名前空間で定義されています。クラスのいずれかを削除したり、開発の後の段階で新しい場所に新しいクラスを追加したりします。特定のインターフェイスを実装しているすべてのクラスをインスタンス化します
実行時にIExample
を実装するすべてのタイプを見つけて、をインスタンス化します。 (私は事前にIExample
を実装しているクラスはコンストラクタ引数を必要としないことを知っていますが、それをコードで指定する方法はわかりませんので、コンパイラではありません...)
これは可能?どうすればそれをやり遂げることができますか?
アップデート:私は今、提案のアプローチのいくつかを試してみたが、私は、「インターフェイスのインスタンスを作成することはできません。」ので、それらのすべて、ラインActivator.CreateInstance(type)
に、私はSystem.MissingMethodExceptionを取得これは私のコードです:
var tasks = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => typeof(IBootstrapperTask).IsAssignableFrom(t))
// This line is where it fails
.Select(t => Activator.CreateInstance(t) as IBootstrapperTask)
.ToArray();
new AutoMapperBootstrapper(tasks).Initialize();
私はすべての例外が表示されないas
句がなければ、私はobject[]
を与えている、と私は抜粋の最後の行のコンストラクタのためIBootstrapperTask[]
を必要としています。私はそれをキャストする様々な方法を試したが、どれもうまくいかないようだ。
もっと重要なことですが、すでにロードされているアセンブリのみが含まれます。 *参照されているがまだロードされていないものがあるかもしれません。個人的に私はそれをすべて明示的に保つことを好む:) –