使用 DBContext 调用类的新实例

问题描述 投票:0回答:1

我不太明白这个依赖注入是如何工作的。我有一个使用 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());
c# entity-framework asp.net-web-api dbcontext
1个回答
0
投票

问题是您在哪里创建新实例。创建

PowerRun
实例时,您正在传递尚未初始化的
_context
变量。

您需要将控制器构造函数更改为:

private static PowerSourceDbContext _context;
private static PowerRun powerRun;

public ForwardController(PowerSourceDbContext context) {
  _context = context;
  powerRun = new PowerRun(_context);
}
© www.soinside.com 2019 - 2024. All rights reserved.