1

我正在使用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>>();

在startup.cs中注入和激活两种方式都可以吗?

4

1 回答 1

3

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

首先

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<>));

它告诉容器

“只要IUnitOfWork<SomeContext>有要求,就解决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<>));

除此之外,请注意,实体框架已经围绕工作单元/存储库模式设计,分别带有DbContextDbSet

于 2019-12-08T11:19:37.340 回答