c# - 如何在 ASP .NET 的 configureServices 函数中获取连接字符串

标签 c# asp.net f# f#-giraffe

我正在尝试使用身份服务来管理我的应用程序的登录。我有以下内容

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/

相关文章:

c# - 如何与另一个框架中的属性进行交互? (C#/WPF)

c# - 如何在 .NET 的非 UI 线程中实现消息泵?

c# - Xaml 内部错误错误 WMC9999

c# - 当我运行我的网站时, GridView 没有出现

C# - 计算并列出文件的硬链接(hard link)位置

asp.net - ASP.NET CORE 中的 Request.Files

asp.net - ASP.Net MVC 2-需要向Asp.Net MVC 2中的强类型Html.Textbox帮助程序添加默认属性

f# - fsyacc/fslex 或 FParsec 选择什么?

f# - 如何为 Web 请求指定 header

具有多态(在 OO 意义上)返回类型的 F# 函数