如何在多租户网站中处理身份服务?

时间:2018-07-19 10:49:47

标签: c# entity-framework asp.net-core

我正在尝试建立一个小型多租户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功能整合到我的多租户站点中?

还是我可能会走错路了?

0 个答案:

没有答案