C# 在ASP.NET Core 2.0中,从json文件进行db种子设定的正确位置是什么?
在我的Core 1.0应用程序中,Startup ctor将几个额外的json文件加载到配置中C# 在ASP.NET Core 2.0中,从json文件进行db种子设定的正确位置是什么?,c#,asp.net-core,.net-core,asp.net-core-2.0,C#,Asp.net Core,.net Core,Asp.net Core 2.0,在我的Core 1.0应用程序中,Startup ctor将几个额外的json文件加载到配置中 public Startup(IHostingEnvironment env) { Environment = env; var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json")
public Startup(IHostingEnvironment env) {
Environment = env;
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json")
.AddJsonFile($"activityGroups.{env.EnvironmentName}.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
}
然后在ConfigureServices中,我从配置中将这些数据抓取到强类型列表中
public void ConfigureServices(IServiceCollection services) {
services.AddDbContext<Models.DbContext>(
options => options.UseSqlServer(
Configuration["Data:DefaultConnection:ConnectionString"]
)
);
services.AddScoped<Repository>();
services.AddTransient<DbSeed>();
services.AddOptions();
services.Configure<List<Models.Task>>(Configuration.GetSection("ActivityGroups"));
}
public void配置服务(IServiceCollection服务){
services.AddDbContext(
options=>options.UseSqlServer(
配置[“数据:默认连接:连接字符串”]
)
);
services.addScope();
services.AddTransient();
services.AddOptions();
services.Configure(Configuration.GetSection(“ActivityGroups”);
}
然后,在Configure中,强类型列表被注入并用于db init
public void Configure(
IApplicationBuilder app,
DbSeed seed,
ILoggerFactory logging,
IOptions<List<ActivityGroup>> activityGroupConfig
) {
app.UseAuthentication();
app.UseMvc();
bool seedDb;
bool.TryParse(Configuration.GetSection("SeedDb").Value, out seedDb);
if (seedDb) {
seed.EnsureSeeded(activityGroupConfig.Value);
}
}
public-void-Configure(
IApplicationBuilder应用程序,
种子,
在工厂日志中,
IOptions因此,在Program.cs的帮助下,我了解了从Program.cs内部获取服务的要点
public class Program {
public static void Main(string[] args) {
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var logger = services.GetRequiredService<ILoggerFactory>();
var ctx = services.GetRequiredService<DataContext>();
// Now I can access the DbContext, create Repository, SeedData, etc!
公共类程序{
公共静态void Main(字符串[]args){
var host=BuildWebHost(args);
使用(var scope=host.Services.CreateScope())
{
var services=scope.ServiceProvider;
var logger=services.GetRequiredService();
var ctx=services.GetRequiredService();
//现在我可以访问DbContext、创建存储库、种子数据等等!
现在,问题是如何从appsettings.json中访问值,这是一个新的SO问题。你做得很对。doco说“不要在BuildWebHost
中这样做”,你是在Configure()
中这样做的。你从哪里得到这个DbSeed
类的?@zaitsman the,“在2.0项目中,移动种子数据。初始化对Program.cs主方法的调用:”我只是不确定如何。目前,执行顺序是:Program.Main()
,Program.BuildWebHost()
,Startup.ConfigureServices()
,然后是Startup.Configure())
。所以我想当启动完成时,所有的服务都配置好了。但是Main(args)
无法识别DI,因为程序。Main
必须有一个特定的签名…对吗?