asp.net-mvc – ASP.NET MVC:HTTPContext和依赖注入

目前我有一个ActionFilter,它从HttpContext获取当前的用户名,并将其传递到在服务方法上使用它的操作.例如:
Service.DoSomething(userName);

我现在有一个理由不是在动作级别,而是控制器构造器级别.目前我正在使用结构图创建控制器并注入服务.我在看:

public interface IUserProvider
{
    string UserName { get; }
}

public class HttpContextUserProvider : IUserProvider
{
    private HttpContext context;

    public HttpContextUserProvider(HttpContext context)
    {
        this.context = context;
    }

    public string UserName
    {
        get
        {
            return context.User.Identity.Name;
        }
    }
}

也就是说,我的IoC foo真的很弱,因为这是我使用它的第一个项目.

所以我的问题是…如何告诉结构图在HttpContextUserProvider的构造函数中传递HttpContext?这似乎很奇怪…我不知道如何想到HttpContext.

解决方法

一个接口抽象HttpContext.Current.仅暴露您需要的方法.例如,GetUserName()将在实现中调用HttpContext.Current.User.Identity.Name.使它尽可能薄.

拿这个抽象并将其注入你的其他提供者类.这将允许您通过嘲笑http上下文抽象来测试提供程序.作为一个副作用,您可以使用该HttpContext抽象来做其他漂亮的事情,除了模拟它.重复使用它,一件事.将通用类型参数添加到行李等

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....