asp.net-coredependency-injectionmodel-validationivalidatableobject

dependency injection into view model class in asp.net core


I am using the following DTO class in one of my api controller class, in an asp.net core application.

public class InviteNewUserDto: IValidatableObject
{
  private readonly IClientRepository _clientRepository;

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

  //...code omitted for brevity
}

This is how I using it in a controller

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

  //...omitted for brevity

}

But I am getting a System.NullReferenceException in the DTO class This is happening since dependency injection is not working in the DTO class. How can I fix this ?


Solution

  • DI will not resolve dependences for ViewModel.

    You could try validationContext.GetService in Validate method.

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