登录时在启动类中注册服务

时间:2018-12-12 15:46:08

标签: .net-core

我正在开发具有多个租户的应用程序。每个租户都可以与用户相关联,以通过存储在数据库中的连接字符串来标识其将访问的数据库。 我遇到的问题是,我只能在用户登录时识别此连接字符串,但是在执行StartUp类时我需要注册此连接字符串。

我尝试使用会话变量来执行此操作,使StartUp类的ConfigureServices方法以正确的值再次运行,但是我无法使此新配置生效。

services.AddScoped<IDapperContext>(s => new DapperContext(connectionString));

我想我需要重新构建才能使新设置生效。 我怎样才能做到这一点? 我在正确的道路上吗? 还有其他解决方法吗?

1 个答案:

答案 0 :(得分:0)

我最近阅读了这篇文章,其中谈到了将HTTPContext注入到您的服务中。

https://www.strathweb.com/2016/12/accessing-httpcontext-outside-of-framework-components-in-asp-net-core/

一旦有了上下文,就可以获取经过身份验证的用户,并从另一个将用户映射到数据库的数据库或源中检索连接字符串。您必须在构造上下文期间配置上下文选项,以便将上下文的连接字符串作为作用域服务进行控制。

您可能想考虑使用上下文工厂来代替它。

startup.cs中的代码将使用连接字符串为数据库添加上下文,然后工厂将其作为注入的依赖项接受。您的工厂还将IHttpContextAccessor作为依赖项,使您可以在上下文中访问用户。然后,您可以在一起获得连接字符串,并连接DbContextOptions以传递到您的上下文的新实例。

对于我来说,这似乎是DI最简单的方法。