使用 ninject,我有这样的绑定(bind):
kernel.Bind<IFoo>().To<MyFoo>().InSingletonScope()
.WithConstructorArgument("bar", new Action<IFoo>(foo =>
{
// some function here
}));
我想做的是确定 IFoo
是否在没有实际尝试使用它的情况下被构造(因为这会导致它被构造)。有没有一种简单的方法可以做到这一点?
最佳答案
我认为这是应用正确模式的问题,例如代理模式:
public class LazyFooProxy : IFoo
{
private readonly Lazy<IFoo> foo;
public LazyFooProxy(Lazy<IFoo> foo) {
this.foo = foo;
}
public bool IsCreated {
get { return this.foo.IsValueCreated; }
}
void IFoo.Method() {
this.foo.Value.Method();
}
}
这里我们创建了一个 LazyFooProxy
能够延迟创建 IFoo
的代理类它还允许检查 foo 是否已创建(通过调用 Lazy<T>.IsValueCreated
属性)。
现在您可以进行以下注册:
var lazyFoo = new LazyFooProxy(new Lazy<IFoo>(kernel.Get<MyFoo>));
kernel.Bind<IFoo>().ToInstance(lazyFoo);
kernel.Bind<MyFoo>().InSingletonScope();
现在您可以使用 LazyFooProxy.IsCreated
属性检查是否MyFoo
是否创建。
关于c# - 检查是否曾经创建过惰性单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669584/