【问题标题】:dependency injection into view model class in asp.net core依赖注入到asp.net核心中的视图模型类
【发布时间】:2018-12-24 00:44:15
【问题描述】:

我在我的一个 api 控制器类中使用以下 DTO 类,在一个 asp.net 核心应用程序中。

public class InviteNewUserDto: IValidatableObject
{
  private readonly IClientRepository _clientRepository;

  public InviteNewUserDto(IClientRepository clientRepository)
  {
    _clientRepository = clientRepository;
  }

  //...code omitted for brevity
}

这就是我在控制器中使用它的方式

[HttpPost]
public async Task<IActionResult> RegisterUser([FromBody] InviteNewUserDto  model)
{
  if (!ModelState.IsValid) return BadRequest(ModelState);

  //...omitted for brevity

}

但我在 DTO 课程中获得了 System.NullReferenceException 这是因为 依赖注入 在 DTO 类中不起作用。 我该如何解决这个问题?

【问题讨论】:

    标签: asp.net-core dependency-injection model-validation ivalidatableobject


    【解决方案1】:

    DI 不会解决 ViewModel 的依赖关系。

    您可以在Validate 方法中尝试validationContext.GetService

    public class InviteNewUserDto: IValidatableObject
    {
        public string Name { get; set; }
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            IClientRepository repository = (IClientRepository)validationContext.GetService(typeof(IClientRepository));
    
            return null;
        }
    }
    

    【讨论】:

    • 谢谢。有用。我对代码做了一点小调整:var repository = validationContext.GetService&lt;IClientRepository&gt;();;我正在查看 IModelBinder 解决方案,但这是一种聪明而简单的方法。
    【解决方案2】:

    您是否在 startup.cs 中注册了 ClientRepository?

    public void ConfigureServices(IServiceCollection services)
    {
       ...
       // asp.net DI needs to know what to inject in place of IClientRepository
       services.AddScoped<IClientRepository, ClientRepository>();
    
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2019-06-07
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多