3つの解決策があります。 Project.Web、Project.Core(ビジネス)、およびProject.Layer(モデル)。
Project.Coreには、Project.Web.ControllerからこのBusiness.GetAllData();
のように呼び出すことができる静的ファイルがあります。
これにより、DAL/EFファイルが呼び出され、data(BusinessDal.GetData()
)が取得されます。
using (DBContext db = new DBContext())
{
return db.GetAllData().ToPOCO();
}
Configuration/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 はコントローラーからそれを読む方法を示しています。そして、その部分は正常に動作し、コントローラーで設定を読み取ることができます。ただし、別のプロジェクトに渡す方法がわからず、静的クラスから呼び出すことができます。
これは必要以上の作業かもしれないと感じていますが、私は急いでいるので、これが私がこれまで行っていることです。他のソリューションが利用可能になり次第、投稿してください。
別の静的クラス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;
}
追伸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");