我有一个类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 方法不接受此参数,如何执行类似的操作?
这是因为
AddKeyedScoped
方法的签名略有不同。正确用法如下:
builder.Services.AddKeyedScoped<ICheck, DbCheck>("key1", (sp, key) => db)