【问题标题】:static variables in web site and web application C#网站和 Web 应用程序 C# 中的静态变量
【发布时间】:2015-05-11 06:23:35
【问题描述】:

我有相同的代码,它们在 2 个不同的 IIS 服务器上工作不同,其中一个被设置为网站,另一个被设置为 Web 应用程序。

我有 2 节课。

public class Config1{
    public static string RelativePath {get; set;}
}

public class Config2{
    public static readonly string FavIconPath = Config1.RelativePath;
}

我从 Global.asax.cs 中的 web.config 分配值

protected void Application_Start(){
    Config1.RelativePath = getWebConfigValue("Path");
}

我在如下视图文件中使用它。

RelativePath : @Config1.RelativePath<p/>
FavIconPath : @Config2.FavIconPath

结果是

On web site server
RelativePath : somevalue
FavIconPath : 

On web application server
RelativePath : somevalue
FavIconPath : somevalue

网站和网络应用程序的实例化时间有什么不同吗?任何帮助将不胜感激!

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 iis-7


    【解决方案1】:

    当第一次引用类型 (Config2) 时,会处理静态字段初始化程序,例如将初始值分配给 Config2.FavIconPath 的初始化程序。这通常发生在您的代码第一次访问它时,但它可能会更早发生。

    Config1.RelativePath的值在Application_Start()方法被调用后发生变化,所以FavIconPath使用的实际值取决于Application_Start()方法和Config2类型被加载的顺序。

    尽管我不知道幕后发生了什么,但这段代码说明了为什么你不应该让代码依赖于框架内部行为。

    【讨论】:

    • 是的,我也是这么想的,所以我假设在网站和 Web 应用程序之间调用 Application_Start() 可能存在一些时间差异。
    猜你喜欢
    • 2014-02-18
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2012-12-18
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多