У меня есть 3 решения. Project.Web, Project.Core (бизнес) и Project.Layer (модели).
В Project.Core у меня есть статический файл, который я могу назвать следующим образом Business.GetAllData();
из Project.Web.Controller.
Это вызывает файлы 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 показывает, как это читать с контроллеров. И эта часть работает нормально, я могу прочитать свои настройки на контроллерах. Однако я не уверен, как передать его в другой проект и по-прежнему иметь возможность вызывать его из статического класса.
2 ответа
Я чувствую, что это может быть больше работы, чем необходимо, но я тороплюсь, так что это то, к чему я пока иду. Не стесняйтесь размещать другие решения по мере их появления.
Я создаю еще один статический класс AppSettingsProvider.cs
public static class AppSettingsProvider
{
public static string DbConnectionString { get; set; }
public static bool IsDevelopment { get; set; }
}
Затем я установил их на свой 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();
BuildAppSettingsProvider();
}
private void BuildAppSettingsProvider()
{
AppSettingsProvider.ConnectionString = Configuration.GetConnectionString("DBContext");
AppSettingsProvider.IsDevelopment = Configuration["IsDev"];
}
Затем я могу вызвать его из моего DbContext.cs
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connString = AppSettingsProvider.ConnectionString;
}
P.S. Я попробовал метод внедрения зависимостей в DbContext (с помощью конструкторов). Однако это не сработало для меня, потому что я вызывал DbContext из статического файла, поэтому DbContextOptions терялся.
Немного более короткая версия, основанная на том же принципе, что и выше:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
StaticConfig = configuration;
}
public static IConfiguration StaticConfig { get; private set; }
Для использования в другом классе static
:
string connString = Startup.StaticConfig.GetConnectionString("DefaultConnection");
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.