Cou*_*uch 7 asp.net-mvc dapper asp.net-core-mvc asp.net-core
通过迁移我开发的当前MVC .Net应用程序,开始玩.Net Core RC2.它看起来像我,因为使用appsettings.json处理配置的方式,如果我有多个连接字符串,我要么必须使用EF来检索连接字符串,要么我必须为每个连接字符串创建单独的类.我看到的所有示例都使用EF(这对我来说没有意义,因为我将使用Dapper)或者该示例构建一个以config中的部分命名的类.我错过了更好的解决方案吗?
"Data": {
"Server1": {
"ConnectionString": "data source={server1};initial catalog=master;integrated security=True;"
},
"Server2": {
"ConnectionString": "data source={server2};initial catalog=master;integrated security=True;"
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我要构建两个类,一个名为"Server1",另一个名为"Server2",如果唯一的属性是连接字符串?
我对 Adem 对使用 RC2 的回应做了一些更正,所以我想我最好把它们贴出来。
我配置了 appsettings.json 并创建了一个类似 Adem 的类
{
"ConnectionStrings": {
"DefaultConnectionString": "Default",
"CustomConnectionString": "Custom"
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class ConnectionStrings
{
public string DefaultConnectionString { get; set; }
public string CustomConnectionString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Adem 的大部分代码在 VS for RC2 中都是开箱即用的,所以我只是将下面的行添加到 ConfigureServices 方法中
services.Configure<Models.ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
Run Code Online (Sandbox Code Playgroud)
主要的缺失点是必须将连接字符串传递给控制器(一旦您指定了强类型配置对象并将其添加到服务集合中,您就可以通过请求实例从任何控制器或操作方法中请求它IOptions,https ://docs.asp.net/en/latest/mvc/controllers/dependency-injection.html )
所以这转到控制器,
private readonly ConnectionStrings _connectionStrings;
public HomeController(IOptions<ConnectionStrings> connectionStrings)
{
_connectionStrings = connectionStrings.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后在实例化 DAL 时传递适当的 connectionString
DAL.DataMethods dm = new DAL.DataMethods(_connectionStrings.CustomConnectionString);
Run Code Online (Sandbox Code Playgroud)
所有的例子都表明了这一点,他们只是没有说明,为什么我直接从 DAL 中提取的尝试没有奏效
您可以使用层Options内访问DAL。我会尝试写一个简单的例子(RC1):
首先,您需要创建包含以下内容的 appsettings.json 文件:
{
"ConnectionStrings": {
"DefaultConnectionString": "Default",
"CustomConnectionString": "Custom"
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个类:
public class ConnectionStrings
{
public string DefaultConnectionString { get; set; }
public string CustomConnectionString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并且在Startup.cs
private IConfiguration Configuration;
public Startup(IApplicationEnvironment app)
{
var builder = new ConfigurationBuilder()
.SetBasePath(app.ApplicationBasePath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
// ....
services.AddOptions();
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
}
Run Code Online (Sandbox Code Playgroud)
最后将其注入到DAL类中:
private IOptions<ConnectionStrings> _connectionStrings;
public DalClass(IOptions<ConnectionStrings> connectionStrings)
{
_connectionStrings = connectionStrings;
}
//use it
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5665 次 |
| 最近记录: |