免責事項:私はDIとIoCにはかなり新しいので、大きな誤解を許してください。Ninjectにコンストラクタの依存関係を提供すると解決できませんか?
IClassA
を実装するオブジェクトが必要なClassB
を考えてみましょう。 Ninjectは、それがClassA
のインスタンスを構築することが可能と仮定すると、ClassB
のコンストラクタにClassA
のインスタンスを注入することができるはずです。
public class ClassA : IClassA
{
public ClassA(string runtimeDependency) { /* ... */ }
}
public class ClassB : IClassB
{
public ClassB(IClassA depA) { /* ... */ }
}
public sealed class TestBootstrapModule : NinjectModule
{
public override void Load()
{
Bind<IClassA>().To<ClassA>();
Bind<IClassB>().To<ClassB>();
}
}
それでは、いくつかのランタイム・ロジックがClassA
に提供string runtimeDependency
の導出に関与しているとしましょう。 NinjectにruntimeDependency
を提供するには、のインスタンスを持つClassB
を提供するにはどうすればよいですか?
文字列は一度しか決定されないため、各インスタンスに新しい値を挿入することについて心配する必要はありません。
私は可変寿命と範囲を述べてうれしいです。変数がバインディングの時点でまだ存在しない場合はどうすればよいですか? (私はすべてのバインディングを初期の場所と共通の場所で初期化する必要があると信じています) – Rob
@robjb:これはデザイン問題のように思えます。それ以上の文脈がなければ、言うことは難しいでしょう。あなたは一度文字列を決定しているだけなので、それが設定された後で*あなたの束縛を行うか、あなたの束縛を行う必要があります。念頭に置いて、私は決してNinjectの専門家ではありません。 – Marc