gpt4 book ai didi

c# - 如何将依赖项注入(inject) asp.net core 中的模型?

转载 作者:太空狗 更新时间:2023-10-30 00:13:56 25 4
gpt4 key购买 nike

假设我有一个如下所示的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com