簡體   English   中英

在 ASP .NET 中使用靜態類初始化另一個靜態類的成員

[英]Using a Static Class to Initialize Members of another Static Class in ASP .NET

無論如何,靜態類是否可以使用來自不同命名空間的另一個靜態類中設置的值來初始化它的一些成員? 反正有沒有規定他們建立的順序?

例如

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"];
    }
}

這是我試圖完成的基本模式的簡化示例; 我想獲取加載到static class ConfigContext的配置文件中的值,並使用它們來初始化static class Utility成員。

您不能規定靜態初始化的順序。 但是您可以通過使用惰性邏輯推遲初始化來完全避免這個問題。

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;
}

使用這種技術,實用程序對象在實際使用之前不會被初始化。

如果初始化ConfigContext的邏輯有類似的問題,您也可以在那里使用 Lazy,並且您的所有惰性字段都將按照需要的順序以級聯方式進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM