gpt4 book ai didi

c# - 检查是否曾经创建过惰性单例

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:36 24 4
gpt4 key购买 nike

使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com