Ninject 注入 Lazy<T> 对象时调用的 Lazy<T> 构造函数是什么?
What is the Lazy<T> constructor called when Ninject inject Lazy<T> objects?
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));
或者您可以将 Bind(typeof(Lazy<>))
或 Bind<Lazy<FooBar>>()
的绑定与
结合使用
说来话长
Lazy<T>
支持由 Ninject.Extensions.Factory 隐式提供。
默认情况下 ninject 将通过实例化该类型来解决对可以直接构造的类型(非接口、非抽象)的请求。 Lazy
也是如此。然后它将搜索它可以提供并使用最多参数的构造函数(参见 here and here)
Ninject.Extensions.Factory 为 Func
提供绑定(参见 here]. But it does not provide a Binding for LazyThreadSafetyMode
. Ninject will thus choose the constructor Lazy(Func<T>)
. This constructor uses LazyThreadSafetyMode.ExecutionAndPublication
(see Remarks here)。
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));
或者您可以将 Bind(typeof(Lazy<>))
或 Bind<Lazy<FooBar>>()
的绑定与
说来话长
Lazy<T>
支持由 Ninject.Extensions.Factory 隐式提供。
默认情况下 ninject 将通过实例化该类型来解决对可以直接构造的类型(非接口、非抽象)的请求。 Lazy
也是如此。然后它将搜索它可以提供并使用最多参数的构造函数(参见 here and here)
Ninject.Extensions.Factory 为 Func
提供绑定(参见 here]. But it does not provide a Binding for LazyThreadSafetyMode
. Ninject will thus choose the constructor Lazy(Func<T>)
. This constructor uses LazyThreadSafetyMode.ExecutionAndPublication
(see Remarks here)。