为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
BIG阳 2021-09-19 15:53:35
我正在尝试使用身份服务来管理我的应用程序的登录。我有以下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 字段的值。
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

希望您将以下代码行添加到您的 app.cofig 文件中。


  <connectionStrings>

    <add name="DefaultConnection"

         connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />

  </connectionStrings>

</configuration>

其中存储了数据库连接字符串。在 ConfigureServices() 中,您可以访问配置对象,这使您可以从 app.config 文件访问应用程序连接字符串。


public void ConfigureServices(IServiceCollection services)

{

    // Add framework services.

    services.AddDbContext<ApplicationDbContext>(options =>

        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

}


查看完整回答
反对 回复 2021-09-19
?
互换的青春

TA贡献1797条经验 获得超6个赞

我将假设您正在使用与以下类似的功能:


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)


查看完整回答
反对 回复 2021-09-19
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

看起来您正在使用一个Startup类来访问ConfigureServices(IServiceCollection services)方法中的配置。


如果你从头开始创建这个类,它不会Configuration神奇地有一个可用的对象。您需要创建一个将被注入的构造函数,然后在某处存储对它的引用。默认情况下,它是这样完成的:


public class Startup

{

    public Startup(IConfiguration configuration)

    {

        Configuration = configuration;

    }


    public IConfiguration Configuration { get; }

}

现在,您可以在类的方法和其他方法中Configuration按预期使用该属性ConfigureServices:


public void ConfigureServices(IServiceCollection services)

{

    services.AddDbContextFactory<IdentityDbContext<IdentityUser>>(options =>

        options.UseInMemoryDatabase(

            Configuration.GetConnectionString("MyConnectionStringKey")));

}


查看完整回答
反对 回复 2021-09-19
  • 3 回答
  • 0 关注
  • 318 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信