将 DI 对象传递给 new class 的构造函数

Passing DI object to constructor of new class

因此,在 Razor Pages 中,我知道如何使用依赖注入在构造函数中注入我的 DbContext(例如)以通过创建全局私有 class 来访问它

=13=]变量。

但是,假设我有一个 DbManager class 对数据库进行所有调用(以避免从应用程序中的每个 Razor 页面进行调用),那么我必须通过class 的上下文,尽管我也在那里使用(至少据我所知)依赖注入。

它不应该能够找到它而不实际将它传递给构造函数吗,这不是整点依赖注入,还是我遗漏了什么?

此处的最佳做法是什么?将上下文作为参数传递感觉不对!我怀疑我做错了什么......是吗?

    public class IndexModel : PageModel
    {
        private readonly AppDbContext _context;
    
        public IndexModel(AppDbContext context)
        {
            _context = context;
        }
    
        public void OnGet()
        {
            var result = new DbManager(_context).GetStuffFromDb(); // Feels weird to pass the context as a parameter here!
        }
    }

如果您没有对 IndexModel 中的上下文进行任何显式引用调用,则仅注入 DbManager。

private readonly IDbManager manager;
    
public IndexModel(IDbManager manager) {
    this.manager = manager;
}
    
public void OnGet() {
    manager.GetStuffFromDb();
    
    //...
}

上下文将在解析时注入到管理器中,前提是它(上下文)也已在组合根目录中注册

//...

builder.Services.AddScoped<IDbManager, DbManager>();
builder.Services.AddDbContext<AppDbContext>(....);

//...

引用Explicit Dependencies Principle