我的应用程序中有来自 Ninject 的 IOC。有几个类需要大量时间来初始化(一些从数据库或文件中获取的静态数据缓存)。显然,它们需要在处理第一个用户请求之前创建。否则超时的风险很高。Ninject 是否提供了一种方法来告诉内核通过绑定并创建一些绑定?
问问题
281 次
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 回答