asp.net core2.0 中在如何在类文件中获取appsetting.json的数据库连接字符串

ahking 2018-03-02 03:27:42
asp.net core2.0 中在如何在类文件中获取appsetting.json的数据库连接字符串

在某个类文件中用如下方法获取连接字符串,提示this在上下文中不可用,
public string ConnStr_sqlserver = ConfigurationExtensions.GetConnectionString(this.configuration, "Sqlserver");
该如何实现呢?

如果是赋值给静态变量,又该怎么写呢
public static string ConnStr_sqlserver = ConfigurationExtensions.GetConnectionString(this.configuration, "Sqlserver");

...全文
3615 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
∽油条á 2020-07-29
  • 打赏
  • 举报
回复
好好看下.net core 的配置和选项模式 不管.net core哪个版本使用方式都那样
ahking 2020-07-29
  • 打赏
  • 举报
回复
对了,现在用.net core 3.1了
ahking 2020-07-29
  • 打赏
  • 举报
回复

 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<DAL._DBConnStr>(Configuration.GetSection("ConnectionStrings"));

            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //app.UseRouting();

            app.UseAuthorization();

            //app.UseEndpoints(endpoints =>
            //{
              
            //    endpoints.MapControllers();
            //});
            app.Run(async (context) => {
                await context.Response.Body.WriteAsync(System.Text.Encoding.Default.GetBytes(DAL._DBConnStr.PcsConnectionString));
            });
        }
    }
报错: An unhandled exception occurred while processing the request. ArgumentNullException: String reference not set to an instance of a String. (Parameter 's') System.Text.Encoding.GetBytes(string s) services.Configure<DAL._DBConnStr>(Configuration.GetSection("ConnectionStrings")); 这句好像没起作用,没有给变量赋值 附:

    public class _DBConnStr
    {
        public static string PcsConnectionString { get; set; }
        
    }
ahking 2020-07-29
  • 打赏
  • 举报
回复
引用
静态属性我没试过,你可以试一下,问题是,为什么要用静态属性? IOptions在DI的时候本来就是singleton的。
我不用Microsoft.Extensions.Options.IOptions 直接用_DBConnStr.DefaultConnection获取连接字符串 这种方式可否
masanaka 2018-03-04
  • 打赏
  • 举报
回复
引用 3 楼 ahking 的回复:
[quote=引用 1 楼 masanaka 的回复:] 定义一个mapping类,映射你的设定。

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}
在Startup.cs的ConfigureServices里绑定设定

services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
在Controller或Service或...内用框架DI容器已经默认注入的Microsoft.Extensions.Options.IOptions获得设定的accessor。

public Home(IOptions<ConnectionStrings> optionAccessor)
{
    var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
两个问题 1、

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}
这里面的DefaultConnection名称是和appsetting.josn的ConnectionStrings节下的每个子项名相同么,如果有多个就写多个属性么,可以用静态属性么? 2、


public Home(IOptions<ConnectionStrings> optionAccessor)
{
    var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
optionAccessor.Value.DefaultConnection;为什么还要加value,这个类的固定用法么? [/quote] 1. 是的,每个子项名相同,有多个就写多个属性。 静态属性我没试过,你可以试一下,问题是,为什么要用静态属性? IOptions在DI的时候本来就是singleton的。 2.固定用法,写了你就知道了
threenewbee 2018-03-03
  • 打赏
  • 举报
回复
https://www.cnblogs.com/xiaomen/p/6362561.html
ahking 2018-03-03
  • 打赏
  • 举报
回复
引用 1 楼 masanaka 的回复:
定义一个mapping类,映射你的设定。

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}
在Startup.cs的ConfigureServices里绑定设定

services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
在Controller或Service或...内用框架DI容器已经默认注入的Microsoft.Extensions.Options.IOptions获得设定的accessor。

public Home(IOptions<ConnectionStrings> optionAccessor)
{
    var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
两个问题 1、

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}
这里面的DefaultConnection名称是和appsetting.josn的ConnectionStrings节下的每个子项名相同么,如果有多个就写多个属性么,可以用静态属性么? 2、


public Home(IOptions<ConnectionStrings> optionAccessor)
{
    var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
optionAccessor.Value.DefaultConnection;为什么还要加value,这个类的固定用法么?
grady.lu 2018-03-03
  • 打赏
  • 举报
回复
如果使用EF core框架,数据库mysql的情况:

  public void ConfigureServices(IServiceCollection services)
        {
            //数据库配置
            services.AddDbContextPool<EntityContext>(options =>
            {
                options.UseMySQL(Configuration.GetConnectionString("EntityContext"), b => b.MigrationsAssembly("Guavo.Data"));
            });
.......
appsettings.json文件中: "ConnectionStrings": { "EntityContext": "server={your server};port=3306;database={yourDb};uid={username};password={password};" }
masanaka 2018-03-03
  • 打赏
  • 举报
回复
定义一个mapping类,映射你的设定。

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}
在Startup.cs的ConfigureServices里绑定设定

services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
在Controller或Service或...内用框架DI容器已经默认注入的Microsoft.Extensions.Options.IOptions获得设定的accessor。

public Home(IOptions<ConnectionStrings> optionAccessor)
{
    var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧