如何在本地创建IConfiguration的实例?

23

我想问如何创建一个ASP.NET Core的Configuration实例,类似于在Controller的构造函数中需要它并知道appsettings.json文件时所创建的实例。

就像这样:_config = ActivatorUtilities.CreateInstance<IConfiguration>(null);

System.InvalidOperationException:“无法找到类型'Microsoft.Extensions.Configuration.IConfiguration'的适当构造函数。确保该类型是具体类型且所有参数的公共构造函数都已注册为服务。”

这是因为它是接口,但在控制器构造函数的情况下它是如何工作的?我如何创建它的实例?

我正在使用MS DI。

谢谢。

1个回答

36

您可以按照下面所示的方法创建本地配置实例。

IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath([PATH_WHERE_appsettings.json_RESIDES])
            .AddJsonFile("appsettings.json")
            .Build();

如需更多信息,请参阅 ASP.NET Core 中的配置


2
它可以正常工作,但您必须手动添加NuGet包 -> https://dev59.com/HVYN5IYBdhLWcg3w07Fx 无论如何,有没有想通过DI实现这个功能的想法? - Joelty
你是在询问如何在不添加包含IConfiguration接口的NuGet包的情况下访问它吗? - Jamie Taylor
1
@Joelty:依赖注入的美妙之处在于你不必关心它是如何实例化和在哪里实例化的,你只需请求接口即可。其余部分可以由你自己配置(你自己的依赖项)或框架(这里是ASP.NET Core和WebHost/GenericHost构建器 - 当然可以进行自定义)来完成。 - Tseng
谢谢,它运行得很好... var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json"); - Marinpietri
为了执行单元测试,.NET Core框架不提供DI,因此我们应该在程序中创建IConfiguration对象的实例。 - Marinpietri
这很好,但是结果对象不能通过DI在单元测试中传递,例如使用ServiceCollection: services.AddTransient<IConfiguration>(obj) - PandaWood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接