假设我有一个如下所示的 Controller 操作:
[HttpPost]
public async Task<IActionResult> Add([FromBody] MyModel model){
await model.Save();
return CreatedAtRoute("GetModel", new {id = model.Id}, model);
}
为了使 model.Save
正常工作,它需要一些依赖项:
public class MyModel{
private readonly ApplicationDbContext _context;
public MyModel(ApplicationDbContext context){
_context = context;
}
public async Task Save(){
// Do something with _context;
}
}
截至目前,context 在 MyModel
的构造函数中为 null
。我怎样才能注入(inject)它?我知道我可以将服务注入(inject) Controller 并以这种方式在我的模型上执行操作,但是如果我宁愿使用面向对象的方法而不是贫血域模型怎么办?这根本不可能吗?
最佳答案
您应该考虑使用 DTO(数据传输对象)模式重构代码。如果只是
MyModel
应该只由一个数据容器 -> 包含属性/计算属性。Save()
方法中的逻辑应该被提取到单独的类中,例如ModelRepository
,它应该知道依赖关系,例如ApplicationDbContext
:public class ModelRepository { private readonly ApplicationDbContext _context; public ModelRepository(ApplicationDbContext context) { _context = context; } public async Task Save(MyModel model) { // Do something with _context; } }
最后,您的 Controller 应该使用 ModelRepository 实例(使用内置 DI 解析它)来保存您的数据:
[HttpPost] public async Task<IActionResult> Add([FromBody] MyModel model) { await _modelRepository.Save(model); return CreatedAtRoute("GetModel", new {id = model.Id}, model); }
关于c# - 如何将依赖项注入(inject) asp.net core 中的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276939/