IoCコンテナとしてNinjectを使用して動的インジェクションを処理するフレームワーク拡張機能に取り組んでいますが、これを実現する方法を見つけるのに問題があります。
IModule(s)
私のフレームワークには、MVCやWebFormsなどで簡単に使用できるように渡すことが期待されています。したがって、クラスは次のように構成されています。
public class NinjectFactory : IFactory, IDisposable {
readonly IKernel kernel;
public NinjectFactory(IModule[] modules) {
kernel = new StandardKernel(modules);
}
}
これは問題ありません。単体テストでインスタンスを作成し、の基本的な実装に合格することができます(テストに推奨されていると思われるIModule
ビルドを使用)。InlineModule
問題は、注入する必要のあるタイプがわかるのは実行時までではなく、次のようなメソッドで、拡張しているフレームワークを介して要求されることです。
public IInterface Create(Type neededType) {
}
そして、これが私が困惑しているところです、私はチェックするための最良の方法がわかりません->作成(必要な場合)->戻る、私はこれまでにこれを持っています:
public IInterface Create(Type neededType) {
if(!kernel.Components.Has(neededType)) {
kernel.Components.Connect(neededType, new StandardBindingFactory());
}
}
これにより、コンポーネントコレクションに追加されますが、インスタンスが作成されたかどうか、またはインスタンスを作成しての引数を渡す方法がわかりません.ctor
。
私はこれを正しい方法で行っていますか、それともNinjectはそのように使用されることさえ意図されていませんか?