在 ASP.NET 中创建用于键控依赖注入的类实例

问题描述 投票:0回答:1

我有一个类DbCheck,它实现了公司nuget包中的ICheck接口。 我使用DbCheck类来健康检查项目中使用的数据库。但是项目中有3个数据库,所以我需要将它们全部注册,就像这样。

var db1 = new DbCheck(checkName, dataConnection, tableInfo);
services.AddScoped<DbCheck>(provider => db1);

var db2 = new DbCheck(checkName, dataConnection, tableInfo);
services.AddScoped<DbCheck>(provider => db2);

var db3 = new DbCheck(checkName, dataConnection, tableInfo);
services.AddScoped<DbCheck>(provider => db3);

但是当我这样做时,我只注册了 db3。 当我尝试为每个数据库使用不同的类(继承自 DbCheck)并单独注册每个类时,我收到一个错误,可能发生在 nuget 方法中。

我尝试过其他方法,也没有效果。

我想尝试这样的事情

services.AddKeyedScoped<DbCheck>("db1", provider => db1);
services.AddKeyedScoped<DbCheck>("db2", provider => db2);
services.AddKeyedScoped<DbCheck>("db1", provider => db3);

但是 AddKeyedScoped 方法不接受此参数,如何执行类似的操作?

asp.net dependency-injection
1个回答
0
投票

这是因为

AddKeyedScoped
方法的签名略有不同。正确用法如下:

builder.Services.AddKeyedScoped<ICheck, DbCheck>("key1", (sp, key) => db)
© www.soinside.com 2019 - 2024. All rights reserved.