将 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>(....);
//...
因此,在 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>(....);
//...