【发布时间】:2016-01-27 20:32:29
【问题描述】:
随着新的 ASP.NET 5 取消了 web.config,从而取消了 ConfigurationManagement 命名空间,我试图弄清楚如何从我的 MVC 应用程序中的数据访问层项目中读取连接字符串。
研究这个问题,我发现的一切都说只是从 Startup.cs 文件中的 project.json 配置文件中读取配置值,如下所示:
var configuration = new Configuration();
configuration.AddJsonFile("config.json");
configuration.AddEnvironmentVariables();
//////
var connString = configuration.Get("Data:DefaultConnection:ConnectionString");
但我不希望我的网络项目与数据访问有任何关系。那么,我的数据访问层项目如何检索此设置中的连接字符串?
更新:这是我的 startup.cs 文件和 ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add MVC services to the services container.
services.AddMvc();
// Register application services.
services.Configure<ApplicationOptions>(options =>
{
options.ConnectionString = "Data:DefaultConnection:ConnectionString";
});
}
这是我的 DataAccessLayer 项目和我的 RepoBase.cs 类
public class RepoBase
{
//private readonly string _connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
//private readonly string _connectionString = Environment.GetEnvironmentVariable("ConnectionString");
private readonly string _connectionString;
public RepoBase(IOptions<ApplicationOptions> appOptions)
{
this._connectionString = appOptions.ConnectionString;
// or just read directly from System.Configuration.Get("");
}
protected SqlConnection GetConnection()
{
var conn = new SqlConnection(_connectionString);
conn.OpenAsync();
return conn;
}
}
这是我关于如何在我的 DAL 项目中检索我的 ApplicationOptions 对象的空白,或者只是读取在 Startup.cs 中设置的连接字符串值
configuration.AddEnvironmentVariables()
方法调用。
更新 2: 哦,这是我需要从我的数据访问层访问环境变量的东西吗:https://github.com/aspnet/configuration/blob/master/src/Microsoft.Extensions.Configuration.EnvironmentVariables/EnvironmentVariablesConfigurationProvider.cs
【问题讨论】:
-
如果DA层是DLL,应该可以读取消费应用的project.json文件。如果它是它自己的应用程序,它将有它自己的 project.json 文件。除非我遗漏了方程式的一部分?
-
让您的 Web 项目检索连接字符串并将其传递给数据层没有任何问题。或者,Web 项目可以将其整个配置传递给数据层,然后数据层可以从配置中挑选出它想要的内容。
-
@Tim 就像你说的,它只是一个单独的 DLL。
-
@mason 既然 ConfigurationManager 不再工作,那么将使用什么命名空间?
-
ASP.NET 5 已死:hanselman.com/blog/… 很抱歉您的损失
标签: c# json asp.net-core asp.net-core-mvc