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;
}
}
我在我的 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;
}
}