我不太明白这个依赖注入是如何工作的。我有一个使用 DBContext 的 Web API,除了我需要调用一个类的新实例之外,它正在处理所有事情。它在我的控制器上工作,当我通过 hangfire 调用一个类时它也工作(只是不是没有 hangfire 的新实例)。我尝试将 _context 从我的控制器传递到我需要调用的类的实例,但那里的上下文为空,所以一定不是这样完成的。如何调用 PowerRun 的新实例并在其中使用 dbcontext?我是否需要创建 PowerSourceDbContext 的新实例,如果需要,我需要指定哪些选项?
private static PowerSourceDbContext _context;
private static PowerRun PowerRun = new PowerRun(_context);
public ForwardController(PowerSourceDbContext context)
{
_context = context;
}
public class PowerRun
{
private static PowerSourceDbContext? powersource;
public PowerRun(PowerSourceDbContext context)
{
powersource = context;
}
public class PowerSourceDbContext : DbContext
{
public PowerSourceDbContext(DbContextOptions<PowerSourceDbContext> options) : base(options)
{
}
public DbSet<MailboxUser> MailboxUsers => Set<MailboxUser>();
public DbSet<MailContact> MailContacts => Set<MailContact>();
public DbSet<MailGroup> MailGroups => Set<MailGroup>();
public DbSet<ScheduledForward> ScheduledForwards => Set<ScheduledForward>();
}
例如,当我使用 Hangfire 调用时,我不需要为 dbcontext 指定任何内容(它可以正常工作)。那么 hangfire 是如何调用它的呢?
var result = BackgroundJob.ContinueJobWith<PowerRun>(jobId, x => x.UpdateDatabaseAsync());
问题是您在哪里创建新实例。创建
PowerRun
实例时,您正在传递尚未初始化的_context
变量。
您需要将控制器构造函数更改为:
private static PowerSourceDbContext _context;
private static PowerRun powerRun;
public ForwardController(PowerSourceDbContext context) {
_context = context;
powerRun = new PowerRun(_context);
}