解析CulterInfo到dll一次

本文关键字:一次 dll CulterInfo 解析 | 更新日期: 2023-09-27 18:05:19

我有一个小应用程序,其中有1个GUI Form和1个Class Library。在我的类库中,我有一个名为"设置"的Class。设置有String Property "CulterInfo"

来自GUI.frm (代码1)

Base.Settings.CultureInfo = "en-US";
ExceptionHandler.test(new EventArgs());

来自Base.dll (代码2)

static ResourceManager rm = new ResourceManager("Languages.Language", System.Reflection.Assembly.LoadFrom("Languages.dll"));
static CultureInfo cul = new CultureInfo(Settings.CultureInfo);
public static void test(EventArgs e)
{
    ParseException(null, new ExceptionHandlerEventArgs() { ExceptionMessage = rm.GetString("exDefault", cul) });
}

这是Settings的代码Class (代码3)

public class Settings
{
    private static string cultureInfo;
    public static string CultureInfo { get { return cultureInfo; } set { cultureInfo = value; } }
}

当我像上面那样做时,我得到一个错误。原因是CulterInfo实际上仍然是什么我使用Base.Settings.CultureInfo = "en-US";

当我在代码1中注释Base.Settings.CultureInfo = "en-US";并在代码3中执行private static string cultureInfo = "en-US";时,它正在工作。


所以我的主要问题是,我想为我使用的dll设置CultureInfo一次,但这并不像我希望的那样工作。是否有更好的方法将CultureInfo设置为dll一次,就像在应用程序启动时一样,并且再也不必为它烦恼了?


编辑1:是否使用配置文件解决这个问题,或者有更优雅的解决方案?

解析CulterInfo到dll一次

您的static CultureInfo cul = new CultureInfo(Settings.CultureInfo);可能在您更新Base.Settings.CultureInfo之前被初始化。

您可以使用InvariantCulture初始化静态CultureInfo,并在使用dll之前更新它

//Code 3
public class Settings
{
    private static CultureInfo culture = CultureInfo.InvariantCulture;
    public static CultureInfo Culture
    {
        get { return culture; }
        set { culture = value; }
    }
    public static void SetCulture(string name)
    {
        culture = new CultureInfo(name);
    }
}
//code 2
public class ExceptionHandler
{
    static ResourceManager rm = new ResourceManager("Languages.Language", System.Reflection.Assembly.LoadFrom("Languages.dll"));
    public static void test(EventArgs e)
    {
        ParseException(null, new ExceptionHandlerEventArgs() { ExceptionMessage = rm.GetString("exDefault", Settings.Culture) });
    }
}
//code 1
/*Base.Settings.Culture = new CultureInfo("en-US");*/ //or...
Base.Settings.SetCulture("en-US");
ExceptionHandler.test(new EventArgs());