J'ai 3 solutions. Project.Web, Project.Core (Entreprise) et Project.Layer (Modèles).
Dans Project.Core, j'ai un fichier statique que je peux appeler comme ceci Business.GetAllData();
à partir de Project.Web.Controller.
Ceci appelle les fichiers DAL/EF et obtient les données (BusinessDal.GetData()
).
using (DBContext db = new DBContext())
{
return db.GetAllData().ToPOCO();
}
Sur ma configuration/DbContext.cs, j'ai ceci:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
#if DEBUG
optionsBuilder.UseSqlServer(@"connstring");
#else
optionsBuilder.UseSqlServer(@"connstring");
#endif
// How do I access configuration here? Configuration["ConnectionString"]
}
Ce que j'essaie de faire, c'est de lire les paramètres de mon appsettings.json. Je me suis assuré que les paramètres sont chargés correctement sur 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();
}
Mais maintenant quoi? ... MS Document montre comment le lire à partir des contrôleurs. Et cette partie fonctionne bien, je peux lire mes paramètres sur les contrôleurs. Cependant, je ne sais pas comment le passer à un autre projet et pouvoir toujours l'appeler depuis une classe statique.
Je pense que cela peut être plus de travail que nécessaire, mais je suis pressé et c'est ce que je vais faire jusqu'à présent. N'hésitez pas à poster d'autres solutions dès qu'elles seront disponibles.
Je crée une autre classe statique AppSettingsProvider.cs
public static class AppSettingsProvider
{
public static string DbConnectionString { get; set; }
public static bool IsDevelopment { get; set; }
}
Puis je les mets sur mon 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"];
}
Ensuite, je peux l'appeler depuis mon DbContext.cs
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connString = AppSettingsProvider.ConnectionString;
}
P.S. J'ai essayé la méthode d'injection de dépendance dans DbContext (en ayant des constructeurs). Cependant, cela n’a pas fonctionné pour moi car j’appelais DbContext à partir d’un fichier statique;
Une version légèrement plus courte basée sur le même principe que ci-dessus:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
StaticConfig = configuration;
}
public static IConfiguration StaticConfig { get; private set; }
Pour utiliser dans une autre classe static
:
string connString = Startup.StaticConfig.GetConnectionString("DefaultConnection");