Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 如何在依赖项注入期间初始化字典类型_C#_.net_.net Core - Fatal编程技术网

C# 如何在依赖项注入期间初始化字典类型

C# 如何在依赖项注入期间初始化字典类型,c#,.net,.net-core,C#,.net,.net Core,作为注册服务的一部分,我正在尝试将appsettings.json中的一组键值对读入字典: services.AddScoped<AddressManager>(t => { const string PhoneBookSection = "PhoneBookSection"; var phonebook = Configuration.GetSettings<Dictionary<string, string>&g

作为注册服务的一部分,我正在尝试将
appsettings.json
中的一组键值对读入字典:

services.AddScoped<AddressManager>(t =>
{
     const string PhoneBookSection = "PhoneBookSection";
     var phonebook = 
           Configuration.GetSettings<Dictionary<string, string>>($"{PhoneBookSection}:DummyConfiguration");               
     return new AddressManager(phonebook);
});
services.AddScoped(t=>
{
常量字符串PhoneBookSection=“PhoneBookSection”;
var电话簿=
GetSettings($“{PhoneBookSection}:DummyConfiguration”);
返回新的AddressManager(电话簿);
});
我在创建此对象时遇到此错误:

无法创建类型为“System.String”的实例,因为缺少该实例 公共的无参数构造函数


你知道我做错了什么以及如何修复吗?

我不确定到底是什么
Configuration.GetSettings
。我不知道,也没有在.NET核心框架中找到这样的方法

但是,有一种方法可以实现您想要实现的目标:

services.AddScoped<AddressManager>(t =>
{
    const string PhoneBookSection = "PhoneBookSection";
    var phonebook = new Dictionary<string, string>();
    Configuration.Bind(PhoneBookSection, phonebook);
    return new AddressManager(phonebook);
});

您确定这是DI问题,而不是如何使用
配置.GetSettings
的问题吗?@BradleyUffner,我不确定问题出在哪里。我认为这可能与DI有关,因为对象创建在此阶段失败。谢谢。我尝试了相同的方法,但错误仍然存在:无法创建“System.String”类型的实例,因为它缺少公共无参数构造函数。请签出并测试我组合的实例。这证明了我的答案是完美的,所以问题一定在别处。我可以想到您的appsettings.json或AddressManager的构造函数。
Install-Package Microsoft.Extensions.Configuration.Binder