我正在尝试建立一个小型多租户ASP.NET Core 2.1 RazorPages网站,该网站以租户所访问的URL为基础,并为每个租户访问一个不同的数据库。
我制作了一个if (subdomain === 'app1' && req.url.indexOf('.') === -1){
} else if (subdomain === 'app2' && req.url.indexOf('.') === -1){
} else { /* return static asset */ }
...
,它在其中抓取URL并切换租户,数据库连接字符串等。
计划永远不要直接访问TenantService
,而是通过DbContext
访问它。
TenantService.DbContext
但是,当我加载主页时,在尝试自己通过代码访问数据库之前,出现以下错误:
InvalidOperationException:类型不提供服务 'Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser]' 已注册。
我知道这是因为在我的Startup.cs中,我用public class TenantService {
..............
public ApplicationDbContext DbContext
{
get {
var dbOptsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
dbOptsBuilder.UseSqlServer(GetTentantDbConnectionString());
return new ApplicationDbContext(dbOptsBuilder.Options);
}
}
}
替换了Database / EntityFramework服务:
TenantService
但是我不知道如何处理//services.AddDbContext<ApplicationDbContext>(options =>
// options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
//services.AddDefaultIdentity<IdentityUser>()
// .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddTransient<Services.TenantService>();
中的services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>();
部分。
甚至在访问TenantService
之前,它似乎正在触发错误。
如何将AddDefaultIdentity / AddEntityFrameworkStores功能整合到我的多租户站点中?
还是我可能会走错路了?