Ninject で配線した依存関係を持つクラスがあります。
public interface IFoo {}
public class MyObject {
[Inject]
IFoo myfoo;
}
実際の実装ではプロパティ注入を使用していますが、簡単に説明するために、フィールドに注入します。私が理解しているように、MyObject のインスタンスを新規作成する代わりに、依存関係を適切に注入するために、使用する必要があります
kernel.Get<MyObject>()
しかし、私がつまずいたのは、MyObject はクラス ライブラリのコンテキストでのみ使用されるということです。目的は、エンド アプリケーションが独自のモジュールを作成し、それをカーネル インスタンスに渡してハイドレートすることです。それを考えると、Ninject カーネルのジェネリック インスタンスをクラス ライブラリに提示して、MyObject (および他の同様のケース) のインスタンスをハイドレートできるようにするための最も実用的な方法は何ですか?
私の最初の傾向は、シングルトン カーネルを内部化するある種のファクトリです。アプリケーション自体は、モジュールをロードしてハイドレート/初期化する必要があります。
だからRandomService.csで
var myKernel = NinjaFactory.Unleash();
var myobj = myKernel.Get<MyObject>();
myobj.foo();
ただし、この道を進みすぎる前に、健全性チェックを行って、考え方が正しいこと、または他に見落としている明らかなものがないことを確認する必要があります。私は明らかに IoC の初心者であり、基本を理解しているように感じますが、必ずしもそれを実際に使用するための最良の方法ではありません。