gpt4 book ai didi

asp.net-mvc-3 - ASP .Net MVC 3 HTTPContext 包装器

转载 作者:行者123 更新时间:2023-12-01 11:57:08 25 4
gpt4 key购买 nike

为了转向 TDD 和单元可测试代码,我读到我应该使用 HttpContext 包装器。在我的服务层以及我的 Controller 中,我必须访问 HttpContext Session 以获取我存储在那里的一些数据。

谁能提供一个 MVC 3 的 HttpContext Wrapper 实现的例子

最佳答案

MVC 运行时已经提供了一个 HttpContextWrapper .您需要实现的是 Session 状态的包装器,并封装通过 HttpContext 访问状态的事实,以便您可以使用 DI 或 Mocking 框架来创建非 HttpContext 为您的测试支持 SessionWrapper。 Brad Wilson provides some good information on how to do this .但是,如果您不想费力地浏览视频(其中包含高级主题),这里是包装 session 的要点:

创建一个表示您通常可以通过 Session 访问的强类型对象的接口(interface):

public interface ISessionWrapper
{
public UserPreferences CurrentUserPreferences{get;set;}
...
}

创建使用 Session 作为后备存储的接口(interface)实现:

public class HttpContextSessionWrapper : ISessionWrapper
{
private T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}

private void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}

public UserPreferences CurrentUserPreferences
{
get { return GetFromSession<UserPreferences>("CurrentUserPreferences"); }
set { SetInSession("CurrentUserPreferences", value); }
}

...
}

使用 DependencyResolver 解析您的 Controller 中的实例(或者最好通过您选择的 DI 框架来完成)。假设您在大多数 Controller 中使用 SessionWrapper,这可以在通用的 BaseController 中完成:

var SessionWrapper = DependencyResolver.Current.GetService<ISessionWrapper>();

关于asp.net-mvc-3 - ASP .Net MVC 3 HTTPContext 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com