0
我正在使用AutoFAC 2.2.4,並對容器分辨率中的協方差提出了一個問題。Autofac協變?
我有我的倉庫基本接口定義:
IRepository<T, TKey>
其中有查找(TKEY)的FindAll()等
它被使用,例如,像這樣:
IRepository<Catalog, int>
這意味着Catalog有一個整數鍵。我這樣註冊它的存儲庫:
builder.RegisterType<CatalogRepository>()
.As<IRepository<Catalog, int>>();
一切都很好。 後來我意識到我需要一個額外的類型.Find(),所以我defiend一個新的接口:
ICatalogRepository : IRepository<Catalog, int>
{
Catalog Find(string name);
}
我改設好註冊:
builder.RegisterType<CatalogRepository>()
.As<ICatalogRepository>();
但現在試圖解決IRepository <目錄,int>失敗。我認爲Autofac會識別與ICatalogRepository的關係並解決它。我必須這樣做:
builder.RegisterType<CatalogRepository>()
.As<ICatalogRepository>()
.As<IRepository<Catalog, int>>();
讓他們兩個來解決。 (還有一些調用來解析來自其他通用實體操作工具的IRepository,它們不知道派生接口。)我做錯了什麼?
這很漂亮 - 謝謝! – n8wrl