我在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
如何做到这一点?
答案 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类,而无需更改类库。