我有3个解决方案。 Project.Web,Project.Core(Business)和Project.Layer(Models)。
在Project.Core中,我有一个静态文件,我可以在Project.Web.Controller中调用这个Business.GetAllData();
。
这会调用DAL / EF文件并获取数据(BusinessDal.GetData()
)。
using (DBContext db = new DBContext())
{
return db.GetAllData().ToPOCO();
}
在我的配置/ DbContext.cs上,我有这个:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
#if DEBUG
optionsBuilder.UseSqlServer(@"connstring");
#else
optionsBuilder.UseSqlServer(@"connstring");
#endif
// How do I access configuration here? Configuration["ConnectionString"]
}
我要做的是从appsettings.json读取设置。我确保在startup.cs上正确加载了设置
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
但现在是什么?... MS Document展示了如何从控制器中读取它。这部分工作正常,我可以在控制器上读取我的设置。但是,我不知道如何将它传递给另一个项目,仍然可以从静态类中调用它。
答案 0 :(得分:16)
我觉得这可能比必要的工作更多,但我匆忙,所以这就是我到目前为止所做的事情。随时可以发布其他解决方案。
我创建了另一个静态类public static class AppSettingsProvider
{
public static string DbConnectionString { get; set; }
public static bool IsDevelopment { get; set; }
}
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
BuildAppSettingsProvider();
}
private void BuildAppSettingsProvider()
{
AppSettingsProvider.ConnectionString = Configuration.GetConnectionString("DBContext");
AppSettingsProvider.IsDevelopment = Configuration["IsDev"];
}
然后我将它们设置在我的Startup.cs
上protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connString = AppSettingsProvider.ConnectionString;
}
然后我可以从我的DbContext.cs
中调用它{{1}}
P.S。我尝试将依赖注入方法导入DbContext(通过使用构造函数)。但是,这对我不起作用,因为我从静态文件调用DbContext,所以DbContextOptions丢失了。
答案 1 :(得分:6)
基于与上述相同的原理的简短版本:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
StaticConfig = configuration;
}
public static IConfiguration StaticConfig { get; private set; }
要在另一个static
类中使用:
string connString = Startup.StaticConfig.GetConnectionString("DefaultConnection");