Внедрение зависимостей в класс модели представления в ядре asp.net

Я использую следующий класс DTO в одном из моих классов контроллера API, в основном приложении 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

}

Но я получаю System.NullReferenceException в классе DTO Это происходит, так как внедрение зависимости не работает в классе DTO. Как я могу это исправить?

2 ответа

Решение

DI не разрешит зависимости для ViewModel,

Вы могли бы попробовать validationContext.GetService в Validate метод.

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

        return null;
    }
}

Вы зарегистрировали ClientRepository в файле startup.cs?

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

   ...
}
Другие вопросы по тегам