.NET Framework4.8中Unity容器注册字典报错:未找到匹配成员
问题排查与解决
1. 修复拼写错误
你的代码中存在一个明显的低级拼写错误:第二个连接字符串获取时,Configurationmanager应为ConfigurationManager(注意M大写),这会导致无法正确读取连接字符串,进而触发后续的参数异常。修正后的字典初始化代码:
var connectionDict = new Dictionary<DatabaseConnectionName, string> { { DatabaseConnectionName.Connection1, ConfigurationManager.ConnectionStrings["Connection1"].ConnectionString }, { DatabaseConnectionName.Connection2, ConfigurationManager.ConnectionStrings["Connection2"].ConnectionString } };
2. 修正Unity字典注册方式
Unity中注册已手动实例化的字典,不应使用RegisterType+InjectionConstructor组合,而应该用RegisterInstance直接注册字典实例。RegisterType用于注册类型并让Unity负责创建实例,而你已经提前创建好了字典对象,直接注册实例即可:
// 替换原来的RegisterType为RegisterInstance container.RegisterInstance<IDictionary<DatabaseConnectionName, string>>(connectionDict); container.RegisterType<IDbConnectionFactory, DapperDbConnectionFactory>();
3. 额外验证点
- 确认
DatabaseConnectionName枚举定义正确,Connection1、Connection2是有效的枚举成员; - 确认App.config/Web.config中存在名称匹配的连接字符串配置,格式示例:
<connectionStrings> <add name="Connection1" connectionString="你的数据库连接字符串" providerName="System.Data.SqlClient" /> <add name="Connection2" connectionString="你的数据库连接字符串" providerName="System.Data.SqlClient" /> </connectionStrings>
内容的提问来源于stack exchange,提问作者Dev 404
相关产品推荐
相关产品推荐

