所以我使用的是 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>>();
是否可以同时在 stratup.cs 中进行注入和激活?
答案 0 :(得分:2)
这两个注册似乎相关。
第一个
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<>));
请注意,实体框架已经围绕工作单元/存储库模式进行了设计,分别具有DbContext
和DbSet
。