asp.net 核心中的视图模型 class 的依赖注入

dependency injection into view model class in asp.net core

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

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 class 中得到一个 System.NullReferenceException 这是因为 依赖注入 在 DTO class 中不起作用。 我该如何解决这个问题?

您是否在 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>();

   ...
}

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;
    }
}