Могу ли я запустить функцию только один раз для каждого процесса в linqpad? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть контейнер 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 голосов
/ 02 мая 2018

Я не осознавал, что это случилось со статикой в ​​LinqPad. Хорошая находка.

Вы пытались заключить вызов в Application_Start() с флагом в вашем классе Singleton аналогично тому, как вы используете if(instance == null).

Что-то вроде ...

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