Как и в C #, вы можете использовать статический конструктор (для которого инициализаторы являются синтаксическим сахаром, во всяком случае):
class Config
{
static [System.Collections.Generic.Dictionary[Environment, hashtable]] $EnvData
static Config() {
$d = New-Object ([System.Collections.Generic.Dictionary[Environment, hashtable]])
$d["Production"] = @{Setting="Foo"}
[Config]::EnvData = $d
}
}
Использование local не обязательно, но я сплю лучше, зная, что инициализация атомарная.
Вы можете также использовать инициализатор ($EnvData = ...
), но это немного сложно в этом случае, так как создание универсального Dictionary
в одном операторе, ну, неудобно, а синтаксис класса не не нравится, если вы усложняетесь (каналы, вызовы вложенных функций). Вы могли бы, если захотите, разделить инициализацию на отдельную скрытую статическую функцию и вызвать ее для инициализации (... $EnvData = [Config]::initialEnvData()
), которая может быть более читабельной, чем один большой конструктор, если у вас много концептуально независимых свойств.