自动FAC - 正在解决错误的键控服务
本文关键字:服务 错误 解决 FAC 自动 | 更新日期: 2023-09-27 17:55:46
我正在使用autofac并尝试按上下文选择服务实现。 基本思想是有两个存储库 - 一个连接到数据库 Db1,另一个连接到数据库 Db2。 我正在尝试使用键控服务来指示需要哪个数据库连接。
代码如下:
public class Db1Repository(IDbConnection dbConnection)
{
// ...
}
public class Db2Repository(IDbConnection dbConnection)
{
// ...
}
public class ClassThatDoesSomethingSpecial(Db1Repository repository)
{
// ...
}
var builder = new ContainerBuilder();
builder.RegisterType<SqlConnection>()
.WithParameter("connectionString",ConfigurationManager.ConnectionStrings["Db1"].ConnectionString)
.As<IDbConnection>()
.Keyed<IDbConnection>("Db1");
builder.RegisterType<SqlConnection>()
.As<IDbConnection>()
.WithParameter("connectionString", ConfigurationManager.ConnectionStrings["Db2"].ConnectionString)
.Keyed<IDbConnection>("Db2");
builder.RegisterType<Db1Repository>()
.WithParameter(
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IDbConnection),
(pi, ctx) => ctx.ResolveKeyed<IDbConnection>("Db1")
)
);
builder.RegisterType<ClassThatDoesSomethingSpecial>();
var container = builder.Build();
var myclass = container.Resolve<ClassThatDoesSomethingSpecial>();
应该发生什么:注入到 ClassThatDoesSomethingSpecial
构造函数中的Db1Repository
应具有解析为 Db1 SqlConnection
的IDbConnection
。
相反,IDbConnection
解析为 Db2 的SqlConnection
!
我做错了什么?
试试这个:
builder
.RegisterType<Db1Repository>()
.WithParameter(ResolvedParameter.ForNamed<IDbConnection>("Db1"));
https://autofac.org/apidoc/html/CF9E2168.htm