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

标签 c# ninject

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

相关文章:

c# - 类及其嵌套类的一个构造函数

c# - 尝试将列表转换为数组会产生 “error CS1503: Argument 1: cannot convert from ' System.Collections.Generic.List <int >' to ' System.Array'”

asp.net-mvc-3 - ASP.NET MVC3 Fluent Validation Constructor 每个请求命中多次

ASP.NET MVC,Ninject,每个请求的单个实例对多个构造函数

请举例说明 Ninject 基础知识

c# - 具有非接口(interface)的构造函数参数的依赖注入(inject)

c# - 在netcf C#中播放铃声期间振动

c# - Windows Mobile 6.1 - .NET CF StatusBar 控件 - 嵌入图标

c# - Linq输出相乘结果

mysql - 为什么我使用 nhibernate 的 asp.net-mvc 站点会停止更新和删除?