是否可以在整个执行路径中使用特定于请求的类?

愤怒的黑客

考虑以下ASP.NET Core项目/类结构:

Request comes in   
  Middleware
    Controller [calls]
      BusinessLayer
        BusinessRules  
          HelperClasses
            DomainSpecificClass
                etc..

当有请求进入时,我想在中间件组件中设置一些值,并在DomainSpecificClass中为特定请求提供这些值。我想,我可以通过依赖注入和方法参数的组合来获取这些值,但是我想知道是否有更简单的方法。

就像是:

// middleware class
public async Task Invoke(HttpContext context) {
   // RequestContext is a made up class
   RequestContext.Referrer = context.Request.Headers["Referer"].ToString();
}

// DomainSpecificClass
private void DoStuff() {
   string referrer = RequestContext.Referrer;
}

.NET Core中是否可以实现这种类型的实现?

法比奥

您可以创建一个类,该类将提供来自“当前”请求的所需数据,并在DI中将其注册为“范围”-每个请求一个实例。

public interface ICurrentRequest
{
    string Referrer();
}

public class CurrentRequest : ICurrentRequest
{
    private readonly IHttpContextAccessor _contextAccessor;

    public CurrentRequest(IHttpContextAccessor contextAccessor)
    {
        _contextAccessor = contextAccessor;
    }

    public string Referrer()
    {
        return _contextAccessor.HttpContext.Request.Headers["Referer"].ToString();
    }
}

使用ASP.NET内置的DI容器将实现注册为“作用域”

services.AddHttpContextAccessor(); // Built-in extension method
services.AddScoped<ICurrentRequest, CurrentRequest>();

在业务层中使用它

public class DomainSpecificClass
{
    private readonly ICurrentRequest _currentRequest;

    public DomainSpecificClass(ICurrentRequest currentRequest)
    {
        _currentRequest = currentRequest;
    }

    private void DoStuff() 
    {
        var referrer = _currentRequest.Referrer();
    }
}

ICurrentRequest 抽象可以在业务层中声明,因此应用程序的任何主机都可以实现抽象,并且业务逻辑将不依赖于“ Http”抽象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 C++ 中使用 AssocQueryString 获取可执行路径

是否可以在 OpenApi 3 中创建特定于环境的路径?

是否可以在本地化文本中使用特定于vue的指令?

'attr_reader' 是否可以在整个类中使用局部变量?

JavaScript执行路径

我可以在tomcat 7中配置特定于应用程序的类路径目录吗?

是否可以使用手机的 IMU 来改善用户的步行路径?

删除特定可执行路径的bash哈希

如果仅初始化超类对象,是否可以调用特定于子类的方法?

如何使用请求路径在Mule ESB中进行路由

是否可以在C ++中使用匿名类?

C ++中有什么方法可以允许不同的数据类型使用不同的执行路径?

Bash:如何执行路径

如何在C#中使用特定于派生类的枚举实现接口?

是否可以使用特定于端点的自定义 JSON 序列化程序?

是否可以在整个请求中保留权限?

是否可以在AWS API Gateway中使用通配符或全部路径

是否可以在浏览器中使用路径模块?

是否可以在javafx的对话框中使用路径转换?

是否可以在 Node 中使用计算机路径?

是否可以在lineinfile ansible模块的路径中使用变量?

Java SecureRandom 声明应该是特定于静态类的,也可以是特定于实例的

Java语法中的大于/小于:<>它们是否特定于类?

是否可以在 Postman 中的集合或请求的描述中使用变量?

是否可以取消特定请求?

是否可以通过代码触发特定于dojo的事件?

是否可以在 Handler 中找到将处理来自其路径的请求的 Controller 类

是否可以在 Celery beat 中使用 gevent 执行池?

是否让淘汰赛计算对象订阅不在初始执行路径中的可观察对象?