Closed 。这个问题需要多问focused /help/closed-questions 。目前不接受答案。
当我收到 Web API 请求时,我想创建一个变量,在请求的生命周期中每个类都可以访问该变量。我希望它像静态属性一样被访问,方式如下App.User
来自任何班级。但我不希望在处理请求后保留它,所以我想 SessionState 不是一个选项。执行此操作的正确方法是什么?
编辑:
它也需要是线程安全的。
As Igor https://stackoverflow.com/users/1260204/igor 请注意,一种选择是使用依赖项注入和参数传递来使“全局”变量可供所有需要它的对象访问。
但如果你真的想使用静态属性,那么你可以使用HttpContext.Items https://msdn.microsoft.com/en-us/library/system.web.httpcontext.items(v=vs.110).aspx 属性来存储仅与当前请求相关的临时数据:
public class App
{
public static IUser User
{
get { return (IUser)HttpContext.Current.Items["User"]; }
set { HttpContext.Current.Items["User"] = value; }
}
}
第三种选择(我don't 建议)是使用由线程静态 https://msdn.microsoft.com/en-us/library/system.threadstaticattribute(v=vs.110).aspx 属性:
public class App
{
[ThreadStatic]
private static IUser user;
public static IUser User
{
get { return user; }
set { user = value; }
}
}
此选项的优点是它不依赖于 System.Web。然而,它是only 如果你的控制器是同步的,则有效,如果你使用过,它就会中断async
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)