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