Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Core 2.0中,从json文件进行db种子设定的正确位置是什么?_C#_Asp.net Core_.net Core_Asp.net Core 2.0 - Fatal编程技术网

C# 在ASP.NET Core 2.0中,从json文件进行db种子设定的正确位置是什么?

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")

在我的Core 1.0应用程序中,Startup ctor将几个额外的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
必须有一个特定的签名…对吗?