作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个如下所示的 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/
我是一名优秀的程序员,十分优秀!