Внедрение зависимостей в класс модели представления в ядре 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>();
...
}