加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Asp.Net核心如何更换配置管理器

发布时间:2020-12-15 06:41:35 所属栏目:百科 来源:网络整理
导读:我是ASP.NET Core RC2的新手,我想知道如何获得一些配置设置并将其应用到我的方法中.对于我的appsettings.json中的实例,我有这个特定的设置 "ConnectionStrings": { "DefaultConnection": "Server=localhost;User Id=postgres;port=5432;Password=castro666;D
我是ASP.NET Core RC2的新手,我想知道如何获得一些配置设置并将其应用到我的方法中.对于我的appsettings.json中的实例,我有这个特定的设置
"ConnectionStrings": {
    "DefaultConnection": 
        "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"
  }

在我的Controller中,每次我想查询数据库时,我都必须使用此设置

using (var conn = 
     new NpgsqlConnection(
         "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"))
 {
     conn.Open();
 }

这里显而易见的是,如果我想在配置中添加更多内容,我必须更改该方法的每个实例.我的问题是如何在appsettings.json中获取DefaultConnection,以便我可以做这样的事情

using (var conn = 
     new NpgsqlConnection(
         ConfigurationManager["DefaultConnection"))
 {
     conn.Open();
 }

解决方法

在ASP.NET Core中,您可以使用许多选项来访问配置.看起来如果你有兴趣访问DefaultConnection,你最好使用DI方法.为了确保您可以使用构造函数依赖注入,我们必须在Startup.cs中正确配置一些内容.
public IConfigurationRoot Configuration { get; }

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json",optional: false,reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

我们现在已从构建器中读取配置JSON并将其分配给我们的Configuration实例.现在,我们需要将其配置为依赖注入 – 所以让我们首先创建一个简单的POCO来保存连接字符串.

public class ConnectionStrings
{
    public string DefaultConnection { get; set; }
}

我们正在实现“Options Pattern”,我们将强类型类绑定到配置段.现在,在ConfigureServices中执行以下操作:

public void ConfigureServices(IServiceCollection services)
{
    // Setup options with DI
    services.AddOptions();

    // Configure ConnectionStrings using config
    services.Configure<ConnectionStrings>(Configuration);
}

现在这一切都已到位,我们可以简单地要求类的构造函数采用IOptions< ConnectionStrings>我们将获得包含配置值的类的物化实例.

public class MyController : Controller
{
    private readonly ConnectionStrings _connectionStrings;

    public MyController(IOptions<ConnectionString> options)
    {
        _connectionStrings = options.Value;
    }

    public IActionResult Get()
    {
        // Use the _connectionStrings instance now...
        using (var conn = new NpgsqlConnection(_connectionStrings.DefaultConnection))
        {
            conn.Open();
            // Omitted for brevity...
        }
    }
}

Here是我一直建议必须阅读的官方文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读