我正在尝试使用身份服务来管理我的应用程序的登录。我有以下内容
let configureServices (services : IServiceCollection) =
// Configure InMemory Db for sample application
services.AddDbContext<IdentityDbContext<IdentityUser>>(
fun options ->
options.UseInMemoryDatabase("NameOfDatabase") |> ignore
) |> ignore
但是它使用内存数据库。我想保留一个用户注册信息,我有 postgresql 设置并想使用该数据库来保留信息。我在 settings.json 文件中有 connectionString 信息。我想把上面的函数改成这样:
let configureServices (services : IServiceCollection) =
// Configure InMemory Db for sample application
services.AddDbContext<IdentityDbContext<IdentityUser>>(
fun options ->
let config = ctx.GetService<IConfiguration>()
let connString = config.Item("connectionString")
options.UseNpgsql(connString) |> ignore
) |> ignore
但问题出在 configureServices 函数中,我无权访问处理应用程序配置的 Httpcontext(由上面的 ctx 表示)。我该怎么做呢?基本上,我想从我的 configureServices 函数中的 settings.json 文件中获取 connectionString 字段的值。
最佳答案
我假设您正在使用与以下类似的函数:
WebHost
.CreateDefaultBuilder(args)
.ConfigureServices(Action<_> configureServices)
.Configure(Action<_> configureApp)
你会发现这个 ConfigureServices
重载了采用 Action<WebHostBuilderContext, IServiceCollection>
的方法.所以你可以把你的功能改成这样:
let configureServices (context:WebHostBuilderContext) (services:IServiceCollection) =
let config = context.Configuration
let connString = config.GetConnectionString "DefaultConnection"
services.AddDbContext<IdentityDbContext<IdentityUser>>(fun opts ->
opts.UseNpgsql(connString) |> ignore
) |> ignore
并将调用代码更改为此(注意 Action<_>
变为 Action<_,_>
):
WebHost
.CreateDefaultBuilder(args)
.ConfigureServices(Action<_,_> configureServices)
.Configure(Action<_> configureApp)
关于c# - 如何在 ASP .NET 的 configureServices 函数中获取连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165277/