Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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 3.0 IServiceProvider无法注入_C#_Asp.net Core_Dependency Injection_Asp.net Core 3.0 - Fatal编程技术网

C# Asp.net 3.0 IServiceProvider无法注入

C# Asp.net 3.0 IServiceProvider无法注入,c#,asp.net-core,dependency-injection,asp.net-core-3.0,C#,Asp.net Core,Dependency Injection,Asp.net Core 3.0,在startup.cs中签下这一行: services.AddScoped<IServiceProvider, ServiceProvider>(); 完全摆脱控制器中的依赖关系,改用此选项: var validator = HttpContext.RequestServces.GetService<TValidator>(); var validator=HttpContext.requestservics.GetService(); 这可能是一个错误 无需注入服务

在startup.cs中签下这一行:

services.AddScoped<IServiceProvider, ServiceProvider>();
完全摆脱控制器中的依赖关系,改用此选项:

var validator = HttpContext.RequestServces.GetService<TValidator>();
var validator=HttpContext.requestservics.GetService();
这可能是一个错误

无需注入服务提供者,因为对于当前请求,可以通过控制器的
HttpContext
访问服务提供者

public BaseController() {

}

public void ValidateFor<TValidator>(object instance) where TValidator : IValidator {
     // Access the service provider via the current request
     var validator = HttpContext.RequestServces.GetService<TValidator>();

      var result = validator.Validate(instance);

      if (result.IsValid) {
            return;
      }

      //... process errors
}
其中,可以相应地重构基本
验证

protected void ValidateFor<TValidator>(TValidator validator, object instance) 
    where TValidator : IValidator {
    var result = validator.Validate(instance);

    if (result.IsValid) {
        return;
    }

    //... process errors
}
受保护的void ValidateFor(TValidator验证器,对象实例)
其中TValidator:IValidator{
var result=validator.Validate(实例);
if(result.IsValid){
返回;
}
//…进程错误
}

参考资料你看过日志了吗?这可能是一个。很好用。在以前的asp.net core 2.0项目中,以前的范例正在运行。然而,这种将验证器直接注入控制器方法的模式也很好看起来确实更干净。
[HttpPost]
public ActionResult Post(MyViewModel viewModel, [FromServices] MyValidator validator) {
    ValidateFor(validator, viewModel);
    if (!IsValid) {
         //... error stuff
    }
    return Ok("Success!");
}
protected void ValidateFor<TValidator>(TValidator validator, object instance) 
    where TValidator : IValidator {
    var result = validator.Validate(instance);

    if (result.IsValid) {
        return;
    }

    //... process errors
}