在vNext中,类库如何访问appsetting.json或config.json?

7

我正在创建一个 Nuget 包,并且在我的类库中工作。我需要访问 appsetting.json 或者 config.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;
}

我有同样的情况(MVC项目正在运行,但所有数据访问都在单独的项目中完成,该项目应从Web项目读取连接字符串)。我没有看到下面的答案被“接受”,这对你仍然不起作用吗? - ganders
1个回答

5

旧的类库能够通过 app.config 文件自动读取配置值。在新的类库中,你需要添加这一功能。Startup.cs 被用来读取 app.settings 文件。在一个类库中,你也必须添加 Startup.cs 文件。

确保在你的 project.json 文件中添加了相关依赖。

"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final"

通过“添加 - 新项目”添加一个名为appsettings.json的文件。筛选条件为json
{
  "Data": {
    "MyDb": {
        "ConnectionString": "Server=.;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  }
}

您可以将连接称为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"]));
        }
    }
}

在上面的示例中,引用
Configuration["Data:MyDb:ConnectionString]

将返回IConfigurationRoot类型,而不是字符串。

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

string connection = Configuration.Get<string>("Data:MyDb:ConnectionString");

1
嗨,这是一个网络项目...我在一个类库vNext中。 - chemitaxis
好的,我现在正在尝试...但是,当我将其用作Nuget时,project.json会读取什么?谢谢! - chemitaxis
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - devfric
好的,我明白了 ;) 谢谢... 但是现在,当我尝试使用Configure时,我遇到了一个错误,Configuration是一种在给定上下文中无效的类型... 有什么想法吗? - chemitaxis
不好意思,我有其他错误 :( 它(get方法)没有输入参数类型... @firste - chemitaxis
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接