0

我的应用程序中有来自 Ninject 的 IOC。有几个类需要大量时间来初始化(一些从数据库或文件中获取的静态数据缓存)。显然,它们需要在处理第一个用户请求之前创建。否则超时的风险很高。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 回答