注入 UnitOfWork 和 DbContext 本身是否可以?

Is it ok to inject both UnitOfWork and DbContext itself?

我正在使用 UnitOfWork 模式并且它运行良好 但因为我需要使用 UserManager 和 SinginManager 我也必须将这部分添加到 startup.cs

        services.AddDbContext<MainDbContext>(p => p.UseSqlServer(
            @"Data Source="));

但是因为我使用的是 UnitOfWork 我也添加了这些行;

            services.AddScoped<IUnitOfWork<MainDbContext>, UnitOfWork<MainDbContext>>();
        services.AddScoped<IUnitOfWork<FinancialDbContext>, UnitOfWork<FinancialDbContext>>();

Is it OK to inject and active both ways in startup.cs?

这两个注册似乎是相关的。

第一个

services.AddDbContext<MainDbContext>(p => p.UseSqlServer(@"Data Source=Main...."));

让容器知道如何在请求时自行解析上下文,

而第二个注册的类型很可能取决于上下文

services.AddScoped<IUnitOfWork<MainDbContext>, UnitOfWork<MainDbContext>>();
services.AddScoped<IUnitOfWork<FinancialDbContext>, UnitOfWork<FinancialDbContext>>();

以上内容也可以使用开放泛型来简化

services.AddScoped(typeof(IUnitOfWork<>), typeof(UnitOfWork<>));

它告诉容器

"When ever IUnitOfWork<SomeContext> is request, resolve to UnitOfWork<SomeContext>"

因此,如果您需要使用不同上下文的单元也没有错

services.AddDbContext<MainDbContext>(p => p.UseSqlServer(@"Data Source=Main....")); 
services.AddDbContext<FinancialDbContext>(p => p.UseSqlServer(@"Data Source=Financial...."));
services.AddScoped(typeof(IUnitOfWork<>), typeof(UnitOfWork<>));

除此之外,请注意 Entity Framework 已经围绕工作单元/存储库模式设计,分别具有 DbContextDbSet