我有一个ASP.NET 5 MVC Web应用程序,在Startup.cs中,我看到了公共属性
IConfigurationRoot Configuration
目前设置为 builder.Build();
在整个MVC Web应用程序中,我可以简单地这样做
Startup.Configuration["Data:DefaultConnection:ConnectionString"]
从appsettings.json
文件中获取连接字符串。
如何使用构造函数注入将在ASP.NET 5 MVC appsettings.json
中指定的连接字符串传递给我的Repository类库?
更新:
以下是所有其他存储库都继承的基本存储库(如您所见,我现在在此处添加了硬编码连接字符串):
public class BaseRepo
{
public static string ConnectionString = "Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;";
public static SqlConnection GetOpenConnection()
{
var cs = ConnectionString;
var connection = new SqlConnection(cs);
connection.Open();
return connection;
}
}
在我的asp.net 5 web应用程序中,我在appsettings.json文件中拥有以下内容,它相当于在.net 4.5 web应用程序中添加连接字符串:
在我的asp.net 5 web应用程序中,在appsettings.json文件中我有以下内容,这相当于在.net 4.5 web应用程序中添加连接字符串:
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;"
}
}
此外,在我的 asp.net 5 网站应用程序中,我在 Startup.cs 中有以下默认代码,它将站点配置加载到类型为 IConfigurationRoot 的公共属性中:
public IConfigurationRoot Configuration { get; set; }
// Class Constructor
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
现在在我的asp.net web应用程序中,如果我想要访问任何appsettings,我只需要执行以下操作:Startup.Configuration["Data:DefaultConnection:ConnectionString"]
但不幸的是,我无法从我的类库中执行此操作。
如果有人想要尝试并找出解决方法,请按照以下步骤进行:
- 创建一个新的ASP.NET 5 MVC Web应用程序。
- 将另一个类型为Class Library(Package)的项目添加到该项目中。
- 找出一种方法将appsettings从ASP.NET 5 MVC应用程序传递到Class Library。
更新后,我仍然不能完全理解。这是我的代码:
public class BaseRepo
{
private readonly IConfigurationRoot config;
public BaseRepo(IConfigurationRoot config)
{
this.config = config;
}
}
由于BaseRepo现在需要构造函数参数,因此此类声明无法工作。
public class CustomerRepo : BaseRepository, ICustomerRepo
{
public Customer Find(int id)
{
using (var connection = GetOpenConnection())
{
...
}
}
}