如何从 asp.net 5 中的数据访问层读取连接字符串

How to read connection string from data access layer in asp.net 5

随着新的 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");

但我不希望我的 Web 项目与数据访问有任何关系。那么,我的数据访问层项目如何在此设置中检索连接字符串?

更新: 这是我的 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 class

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

这是

的副本

在您的 ConfigureServices 方法中将您的配置对象添加为单例。

public void ConfigureServices(IServiceCollection services) {
    services.AddSingleton(_ => configuration);
}

然后像这样更新您的 BaseRepo class

public class BaseRepo {
    private readonly IConfigurationRoot config;

    public BaseRepo(IConfigurationRoot config) {
        this.config = config;
    }

    public static SqlConnection GetOpenConnection() {
        var cs = config.Get<string>("Data:DefaultConnection:ConnectionString");
        var connection = new SqlConnection(cs);
        connection.Open();
        return connection;
    }
}

//此方法用于return连接字符串

            protected  string OnConfiguring() 
            {

                var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).
                    AddJsonFile("appsettings.json", optional: true,
                    reloadOnChange: true);
appsettings.json file            
                string dbConnection = builder.Build().GetSection("ConnectionStrings").GetSection("DevConnections").Value;
                return dbConnection;
            }
        //inside this mehtod connection string is used
        public DataTable GetDataTable(string cmdText)
        {
            DataTable dt = new DataTable();           
            var constr = OnConfiguring(); //this method is called to get connection string

            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmdText, con);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.Fill(dt);
            }
            return dt;
        }
    }
}