如何从Main内部获取IConfiguration?

时间:2018-01-12 20:33:04

标签: c# asp.net-core entity-framework-core

以下仅供参考。

我有一个$(document).ready(function(){ $(window).on('dragenter', function(){ do stuff }); }); ,内容如下:

secrets.json

我需要使用以下播种机为数据库播种。

{   
  "Message": "I still know what you did last summer."
}

public static class SeedData { public static void Initialize(IServiceProvider isp, IConfiguration c) { using (var context = isp.GetRequiredService<MyContext>()) { if (context.Members.Any()) return; context.Members.AddRange ( new Member { Message= c["Message"] } ); context.SaveChanges(); } } } 内调用播种机,如下所示。

Main

问题

如何从public static void Main(string[] args) { IWebHost iwh = BuildWebHost(args); using (IServiceScope iss = iwh.Services.CreateScope()) { IServiceProvider isp = iss.ServiceProvider; try { // IConfiguration c = ?????? SeedData.Initialize(isp, c); } catch (Exception ex) { ILogger<Program> logger = isp.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An error occurred seeding the DB."); } } iwh.Run(); } 获取IConfiguration c

1 个答案:

答案 0 :(得分:2)

您可以像对待MyContext服务一样:

var configuration = isp.GetRequiredService<IConfiguration>();

如果将两个依赖项都传递给SeedData.Initialize而不是依赖项和IoC容器,那会更好:

public static void Initialize(MyContext context, IConfiguration config)
{
    ...
}

IServiceProvider isp = iss.ServiceProvider;
try
{ 
    var configuration = isp.GetRequiredService<IConfiguration>();
    var context = isp.GetRequiredService<MyContext>();
    SeedData.Initialize(context, configuration);
}

有了这个,你至少可以避免使用Initialize方法中的服务定位器反模式。