我可以在linqpad中每个进程只运行一次函数吗?

时间:2018-05-02 12:20:49

标签: c# linqpad

我有一个Ninject IoC容器,它有很多绑定。我在我的linqpad脚本中绑定。

但是,当我尝试多次运行时,这会失败,因为在第二次运行时会有多个相同类型的绑定,所以当我尝试从IoC容器中获取它时会失败。

我是否在Ninject中使用了应用程序启动或初始化函数,因此绑定只发生一次?

例如,在MVC程序中,我将使用Application_Start()

示例:在此程序中,每次运行程序时,输出计数都会增加。是否有可以挂钩的应用程序启动事件来重置计数?

我的实际需求是防止ninject内核的双重绑定,所以请不要修复单例的“解决方案”,我知道它不是线程安全的等等!

void Main()
{
    {
        var x = Singleton.Instance;
        Console.WriteLine(x.count++);
    }
}

// Define other methods and classes here

public class Singleton
{
    private static Singleton instance;

    private Singleton() { }

    public int count;

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
                instance.count = 0;
            }
            return instance;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我没有意识到LinqPad中的静态发生了这种情况。很好找。

您是否尝试使用Application_Start()类中的标记将Singleton的呼叫包裹起来,与您使用if(instance == null)的方式类似。

像...一样的东西。

private static bool _initialised;
public static void Initialise()
{
    if(_initialised)
      return;
    _initialise = true;
    something.Application_Start();
}