从类库访问到vNext中的appsetting.json或config.json

che*_*xis 6 c# asp.net-core

我正在创建一个Nuget包,我正在我的类库中工作.我需要访问appsetting.jsonconfig.json才能访问默认连接字符串.

将实际工作代码迁移到新版本的ASP.NET vNext的最佳方法是什么?

我在这个问题上已经读过它,但对我来说这是一个很好的解决方案.

工作代码:

/// <summary>
/// Retrieves the default connectionstring from the App.config or Web.config file.
/// </summary>
/// <returns>Returns the default connectionstring from the App.config or Web.config file.</returns>
public static string GetDefaultConnectionString()
{
    return ConfigurationManager.ConnectionStrings[DefaultConnectionstringName].ConnectionString;
}
Run Code Online (Sandbox Code Playgroud)

dev*_*ric 5

旧类库使用app.config自动读取配置值.在新的类库中,您必须添加此功能.Startup.cs用于读取app.settings在类库中,您还必须添加Startup.cs.

在你的project.json确保你有依赖

"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final"
Run Code Online (Sandbox Code Playgroud)

添加一个过appsettings.jsonadd - new item.过滤json

{
  "Data": {
    "MyDb": {
        "ConnectionString": "Server=.;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以调用您的连接MyDb或DefaultConnection.

添加一个Startup.cs来放置代码来读取appsettings.json.

请参阅下面的Startup构造函数方法.

例如

using Microsoft.Data.Entity;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;



namespace MyProject
{
    public class Startup
    {
        public IConfigurationRoot Configuration { get; set; }

        public Startup()
        {
            var builder = new ConfigurationBuilder()
             .AddJsonFile("appsettings.json");

            Configuration = builder.Build();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<MyDbContext>(options =>
                    options.UseSqlServer(Configuration["Data:MyDb:ConnectionString"]));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中引用

Configuration["Data:MyDb:ConnectionString]
Run Code Online (Sandbox Code Playgroud)

将返回一种IConfigurationRoot,而不是字符串.

要获取字符串值,请尝试以下操作

string connection = Configuration.Get<string>("Data:MyDb:ConnectionString");
Run Code Online (Sandbox Code Playgroud)