gpt4 book ai didi

c# - 如何从 Main 中获取 IConfiguration?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:18 25 4
gpt4 key购买 nike

以下内容仅供引用。

我有一个包含以下内容的 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();
}

问题

如何从Main获取IConfiguration c

最佳答案

您将像为您的 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 方法中的服务定位器反模式。

关于c# - 如何从 Main 中获取 IConfiguration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48233629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com