gpt4 book ai didi

asp.net-mvc - 在服务层使用 HttpContextBase

转载 作者:行者123 更新时间:2023-12-04 05:35:11 27 4
gpt4 key购买 nike

我最近开始使用 TDD 和依赖注入(inject)。这是一个很大的心态变化,我仍在努力将所有部分拼凑在一起。

我有一个用于所有业务逻辑的服务层,以使 Controller 尽可能薄。我的服务中的某些服务需要 HttpContext。什么是创建服务的最佳方式,以便也可以进行单元测试。

目前我有一个看起来像这样的 ServiceBase

public class HttpContextService 
{
private HttpContextBase _ServiceContext;
public HttpContextBase ServiceContext
{
get
{
if (_ServiceContext == null)
_ServiceContext = new HttpContextWrapper(HttpContext.Current);
return _ServiceContext;
}
set { _ServiceContext = value; }
}
}

所以这意味着我所有的服务都可以从这个服务继承。我为 HttpContextBase 创建属性的原因是我可以在对服务进行单元测试时设置它。 1.有没有办法将HttpContext注入(inject)Unity Bootstrap文件中的服务。 ?
2.这是正确的方法还是我错过了什么?

提前致谢。就像我说的,我正在努力理解整个 TDD 依赖注入(inject)的编码方式。

最佳答案

Some of the services in my service requires HttpContext



您的服务应该存在于业务层中,并且该层不应该有您使用的表示技术的概念。这允许您将此逻辑重用于不同的技术(例如 WCF Web 服务或 Windows 服务)。但即使您不打算重用此代码,请将您的服务紧密耦合到 HttpContextBase正如您已经经历的那样,仍然会增加复杂性,并使单元测试变得更加困难。

解决方案是从 HttpContextBase 中抽象出你想要的东西。在抽象之后,而不是对完整 HttpContext 的抽象,但在特定情况下要使用的单个功能。

例如,当您想访问 HttpContextBase.User属性,您最好使用以下抽象:

public interface IUserContext
{
IIdentity Current { get; }
}

这使测试更容易,您的服务更简单,并且为不同的应用程序创建不同的实现更简单。

关于asp.net-mvc - 在服务层使用 HttpContextBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050017/

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