gsi*_*ank 0 c# lazy-loading ninject
Lazy有几个构造函数,通过它们可以控制Lazy实例的线程行为.Ninject使用什么构造函数来创建注入的Lazy实例?我如何指定Ninject必须使用哪个构造函数?如果可能的话.
默认值是LazyThreadSafetyMode.ExecutionAndPublication
使用以下之一更改它:
// for all Lazy's
Bind<LazyThreadSafetyMode>().ToConstant(LazyThreadSafetyModeNone);
// for a specific Lazy<FooBar>
Bind<LazyThreadSafetyMode>().ToConstant(LazyThreadSafetyModeNone)
.WhenInjectedInto(typeof(Lazy<FooBar));
Run Code Online (Sandbox Code Playgroud)
或者您也可以使用Binding Bind(typeof(Lazy<>))或Bind<Lazy<FooBar>>()结合使用
Lazy<T>Ninject.Extensions.Factory隐式提供了支持.
默认情况下,ninject将通过实例化该类型来解析对可以直接构造的类型(非接口,非抽象)的请求.这也适用Lazy.然后它将搜索具有它可以提供的最多参数的构造函数并使用它(参见此处和此处)Ninject.Extensions.Factory为Funcs 提供绑定(参见此处).但它不提供绑定LazyThreadSafetyMode.Ninject因此将选择构造函数Lazy(Func<T>).这个构造函数使用LazyThreadSafetyMode.ExecutionAndPublication(参见这里的备注).
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |