Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心MVC按请求注入_C#_Unit Testing_.net Core_Tdd_Moq - Fatal编程技术网

C# ASP.NET核心MVC按请求注入

C# ASP.NET核心MVC按请求注入,c#,unit-testing,.net-core,tdd,moq,C#,Unit Testing,.net Core,Tdd,Moq,我期待着在.NETCore中为每个请求注入RequestContext。在服务集合内部 8年前有人尝试过。 并将其注入启动时的某个位置,如下所示: services.AddTransient<IMvcDepency, MvcDepency>(x => x.???); 当前错误: System.InvalidOperationException:“在尝试激活“CAWP.Api.Controllers.mvcdepence”时,无法解析类型为“Microsoft.AspNetC

我期待着在.NETCore中为每个请求注入RequestContext。在服务集合内部

8年前有人尝试过。

并将其注入启动时的某个位置,如下所示:

services.AddTransient<IMvcDepency, MvcDepency>(x => x.???);
当前错误:
System.InvalidOperationException:“在尝试激活“CAWP.Api.Controllers.mvcdepence”时,无法解析类型为“Microsoft.AspNetCore.Http.HttpRequest”的服务。”

控制器已通过基类访问每个方法中的
HttpRequest
对象。但它只有在调用方法后才可用(原因很明显!)。如果您想将其包装在自己的类中,那么可以在
OnActionExecuting
覆盖中完成

您可以在
OnActionExecuting
中创建一个新的
mvcdepence
类,并在代码中引用它。由于控制器是根据请求创建的,所以您应该能够使用类变量来存储引用

public class ValuesController : Controller
{
    private IMvcDepency _depency;

    public ValuesController()
    {
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        _depency = new MvcDepency(context.HttpContext.Request);

        base.OnActionExecuting(context);
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var path = _depency.PathValue;

        return new string[] { "PathValue", path };
    }
}
公共类值控制器:控制器
{
私人独立性;
公共价值控制人()
{
}
公共重写无效OnActionExecuting(ActionExecutingContext上下文)
{
_Dependence=新的MVCDepence(context.HttpContext.Request);
base.OnActionExecuting(上下文);
}
//获取api/值
[HttpGet]
公共行动结果获取()
{
变量路径=_depency.PathValue;
返回新字符串[]{“PathValue”,path};
}
}
这将导致
mvcdepence
类可以访问
HttpRequest
对象。 您应该为
imvcdependency
接口添加一个工厂类,以避免
OnActionExecuting
中的
new
,您的意思是这样的吗?
public override void OnActionExecuting(ActionExecutingContext actCtx)
    {
        MvcDepency mvcDepency = actCtx.HttpContext.RequestServices.GetService(typeof(IMvcDepency)) as MvcDepency;
        mvcDepency = new MvcDepency(actCtx.HttpContext.Request);
        actCtx.HttpContext.RequestServices.AddService(mvcDepency);// AddService method doesn't in exist
      }
public class ValuesController : Controller
{
    private IMvcDepency _depency;

    public ValuesController()
    {
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        _depency = new MvcDepency(context.HttpContext.Request);

        base.OnActionExecuting(context);
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var path = _depency.PathValue;

        return new string[] { "PathValue", path };
    }
}