0

我在一个 MVC 项目中遇到了一个问题,这个问题是关于从应用程序状态对象中检索值。

我以这种方式Application_Start()将一些值存储到应用程序状态中:Global.axas.cs

//var str = Obj.DecryptString(ConfigurationManager.ConnectionStrings["ConStr"].ToString());
//Application["connString"] = str;

Application["connString"] = Obj.DecryptString(ConfigurationManager.ConnectionStrings["ConStr"].ToString());

我已web.config通过调试确保此时已成功检索到的值。

在这一步之后,我试图以我的一种Model Class方式检索这个值:

var conn = new SqlConnection(Application["connString"].ToString());

但在这里我得到一个NullReferenceException Object reference not set to an instance of an object.

现在这对我来说非常令人困惑,如果该值已成功检索并存储在AapplicationState为什么Application_Start()它在我的模型类中不可用,那么 ApplciatiopnSate 不是在整个应用程序中可用吗?

4

1 回答 1

0

我的建议是不要将连接字符串保留在 Application 变量中。相反,您可以声明一个可以返回连接字符串的静态方法。将连接字符串存储在静态变量中,如下所示

public class Utility
{
    static string connectionString;    
    public static string GetConnectionString()
    {
        if(string.IsNullOrEmpty(connectionString))
            connectionString = Obj.DecryptString(ConfigurationManager.ConnectionStrings["ConStr"].ToString());
        return connectionString;
    }
}

配置文件被缓存,从此无需担心每次调用方法时读取文件的性能

于 2012-11-15T12:30:12.377 回答