Использование класса Stati c для инициализации членов другого класса Stati c в ASP. NET - PullRequest
0 голосов
/ 08 января 2020

Есть ли способ для класса * stati c использовать значения, заданные в другом классе * stati c из другого пространства имен, для инициализации некоторых его членов? Есть ли способ диктовать порядок, в котором они устанавливаются?

Например,

namespace Utility
{
    using Config;

    public static class Utility
    {
        public static UtilityObject myUtil = new UtilityObject(ConfigContext.myValue)
    }
}
...
// somewhere in a different file/project
...
namespace Config
{
    public static class ConfigContext
    {
        public static string myValue => ConfigurationManager.AppSettings["key"];
    }
}

Это упрощенный пример базового паттерна c, который я пытаюсь выполнить; Я хотел бы взять значения, которые находятся в файле конфигурации, которые загружены в static class ConfigContext, и использовать их для инициализации членов static class Utility.

1 Ответ

1 голос
/ 08 января 2020

Вы не можете диктовать порядок инициализации c. Но вы можете полностью избежать этой проблемы, отложив инициализацию с помощью lazy logi c.

public static class Utility
{
    private static Lazy<UtilityObject> _myUtil = null;

    private static Utility()
    {
        _myUtil = new Lazy<UtilityObject>( () => new UtilityObject(ConfigContext.myValue) );
    }

    public static myUtil => _myUtil.Value;
}

Используя эту технику, служебный объект не инициализируется до тех пор, пока он не будет фактически использован.

Если Логика c для инициализации ConfigContext имеет аналогичную проблему, вы также можете использовать Lazy там, и все ваши ленивые поля будут инициализированы каскадным способом, в порядке, в котором они необходимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...