ASP.NET可以使用Session& HttpContext.Application在库中

时间:2016-11-14 23:35:09

标签: c# asp.net session

我在Controller中的HttpGet方法中有以下代码

Session["var1"] = "someval1";
HttpContext.Application["var2"] = "someval2";

我希望将这段代码放在库[dll]中,以便在库中我有

// Inside DLL Library  
// namespace MyNS, class MyCl

public void InitVars()
{
    Session["var1"] = "someval1";
    HttpContext.Application["var2"] = "someval2";
}

从我的控制器Get方法

调用它

//在控制器类HttpGet

    InitVars();

如何访问Session&库中的Application对象

我收到了错误

  

当前上下文中不存在名称Session

     

当前上下文中不存在名称HttpContext

如何做到这一点?

3 个答案:

答案 0 :(得分:3)

您只需在Visual Studio中打开代码库.csproj,在set a reference中打开System.Web.dll,同样的代码将在DLL中运行。

您可以使用以下代码获取对当前HttpContext的引用:

var context = System.Web.HttpContext.Current;

之后你可以简单地调用

context.Session["var1"] = "someval1";
context.Application["var2"] = "someval2";

答案 1 :(得分:0)

这有效

void InitLogin(System.Web.HttpSessionStateBase Session, 
             System.Web.HttpApplicationStateBase Application)
{
    Session["var1"] = "someval1";
    Application["var2"] = "someval2";
}

并将其命名为

InitVars(Session, Application);

答案 2 :(得分:0)

  

如何访问Session&库中的Application对象

不要直接做,你会把你的代码结合起来。我建议使用Adapter Pattern。像这样(未经测试):

班级图书馆:

CNContactViewController *controller = [CNContactViewController viewControllerForUnknownContact:person];

controller.contactStore = [[CNContactStore alloc] init];
controller.delegate = self;
controller.allowsActions = NO;

[self.navigationController pushViewController:controller animated:YES];

网络应用程序:

public interface IStorage
{
  T GetSession<T>(string key);
  void SetSession<T>(string key, T value);
  T GetGlobal<T>(string key);
  void SetGlobal<T>(string key, T value);
}

public void InitVars(IStorage storage)
{
  storage.SetSession("var1", "someval1");
  storage.SetGlobal("var2", "somval2");
}

现在您对任何Web类都没有依赖关系。如果您决定使用asp.net核心(没有HttpContext.Current等),您可以轻松修改WebStorage类,而无需更改类库。