我使用autofac並嘗試pick a service implementation by context。基本思想是有兩個存儲庫 - 一個連接到數據庫Db1,另一個連接到數據庫Db2。我試圖使用鍵控服務來指示需要哪個數據庫連接。autofac - 錯誤的鍵控服務正在解決中
下面的代碼:
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
應該有一個IDbConnection
這是解析爲SqlConnection
到DB1。
相反,IDbConnection
解析爲SqlConnection
至Db2!
我在做什麼錯?
會發生什麼事,如果你使用'名爲<的IDbConnection>( 「DB1」)'而不是爲每個連接註冊的? – Amy
@Amy - 同樣的問題。 – MCS
我試過你的代碼,一切都按預期工作:https://dotnetfiddle.net/PLE3Uz –