【发布时间】:2021-03-22 13:04:51
【问题描述】:
我正在使用 Entity Framework Core 和 Simple Injector IoC 容器构建 ASP.NET Core WebApi 服务。 该应用程序通过 Npgsql.EntityFrameworkCore.PostgeSQL 使用 postgresql 数据库。
这是我的 Startup 和 ServicesInstaller 中的代码 sn-p:
public class Startup
{
public IConfiguration Configuration { get; }
private IConfigurationRoot configurationRoot;
private Container container;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
// Build configuration info
configurationRoot = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true,
reloadOnChange: true)
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Initialize Container
container = new SimpleInjector.Container();
container.Options.ResolveUnregisteredConcreteTypes = false;
container.ConfigureServices();
services.AddSimpleInjector(container, options =>
{
options.AddAspNetCore()
.AddControllerActivation();
options.AddLogging();
});
}
}
ServicesInstaller:
public static class ServicesInstaller
{
public static void ConfigureServices(this Container container)
{
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
//Assembly.Load will not re-load already loaded Assemblies
container.Register<IFooContext, FooContext>(Lifestyle.Scoped);
container.Register<FooContext>(Lifestyle.Scoped);
}
}
这是来自我的 DB Context 类的代码 sn-p:
public interface IFooContext
{
}
public class FooContext : DbContext, IFooContext
{
public FooContext()
{
}
protected override void OnConfiguring(
DbContextOptionsBuilder optionbuilder)
{
optionbuilder.UseNpgsql(
"Server=.;Port=5432;Database=...;User ID=...;Password=...;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
目前我正在将我的连接字符串硬连线到 PostGreSQL DB。我希望能够从数据库上下文中的 AppSettings.json 文件中检索连接字符串。我相信正确的做法是在 OnConfiguring() 方法中。
对吗?
鉴于此模型,如何正确访问 DBContext 类中的 AppSettings.json 文件?
【问题讨论】:
-
您可以尝试看看this other question,我认为第一个答案符合您的要求。 stackoverflow.com/questions/59499635/…
标签: entity-framework-core asp.net-core-webapi simple-injector