0

アプリに Ninject の IOC があります。初期化にかなりの時間がかかるクラスがいくつかあります (DB またはファイルからフェッチされるいくつかの静的データ キャッシュ)。どうやら、最初のユーザー要求を処理する前に作成する必要があるようです。そうしないと、タイムアウトのリスクが高くなります。Ninject は、カーネルにバインディングを通過させて作成するように指示する方法を提供しますか?

4

2 に答える 2

6

アプリを接続するときに、これらのインスタンスを作成し、すべての依存関係に対して WithConstructorArgument で渡すことができます。かなり奇妙ですが、認めざるを得ませんが、うまくいきます。

var heavy = new HeavyDependency();
Bind<SomeInterface>().To<SomeClass>().WithConstructorArgument("HeavyDependency", heavy );
于 2012-10-24T06:37:22.590 に答える
0

依存関係をプロキシの背後に隠して、バックグラウンドでロードできます。

public class LazyHeavyDependency : IHeavyDependency 
{
    private readonly Lazy<IHeavyDependency> lazy;

    public LazyHeavyDependency(Lazy<IHeavyDependency> lazy)
    {
        this.lazy = lazy;
    }

    void IHeavyDependency.DoWork()
    {
        this.lazy.Value.DoWork();
    }
}

次のように配線できます。

var lazyDependency = new Lazy<IHeavyDependency>(() =>
    new RealHeavyDependency());

Bind<IHeavyDependency>()
    .ToConstant(new LazyHeavyDependency(lazyDependency));

// Load value in a background thread.
Task.Factory.StartNew(() => lazy.Value);
于 2012-10-24T08:06:13.403 に答える