Избегайте вызова конструктора с помощью клавиши Tab

Я пишу модуль PowerShell на С#. Во время выполнения один из командлетов вызывается так:

Test-Path -Path \\path\to\somewhere

Мой конструктор выглядит так:

public TestPath()
{           
    checkPathExistence();           
}

Это работает до тех пор, пока пользователь во время выполнения не нажмет клавишу Tab для автозаполнения имени параметра:

Test-Path -Pa <TAB>

Клавиша Tab запускает конструктор, и это приводит к тому, что мой метод checkPathExistence() дает нежелательные результаты. Как заставить мой checkPathExistence() ждать нажатия клавиши Enter, прежде чем что-либо проверять?

Моей первой идеей было проверить, что Path является нулевым. Но Path не является обязательным. Если командлет вызывается без каких-либо параметров, устанавливается некоторый стандартный путь из предыдущих сеансов.

void checkPathExistence()
{            
    if (!File.Exists(this.Path))
    {
       Path = Properties.Settings.Default.Path;
    }
    else
    {                
        Properties.Settings.Default.Path = Path;
        Properties.Settings.Default.Save();
        Console.WriteLine("The path has changed to: " + Path);
    }
}
}

person piccus    schedule 11.10.2016    source источник
comment
Где вызывается конструктор TestPath?   -  person ltiveron    schedule 11.10.2016


Ответы (1)


Проблема здесь в том, что вы вызываете checkPathExistence во время конструктора. Вместо этого похоже, что вы хотите вызывать его только при обработке командной строки, включая путь. Оставьте конструктор пустым и вместо этого обработайте командную строку во время ProcessRecord. См. раздел обработка входных данных командлета.

person MatthewG    schedule 11.10.2016