2011-07-18 63 views
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,它們不知道派生接口。)我做錯了什麼?

回答

2

這是預期的行爲。但是,您可以查看assembly scanning功能以及特別是AsImplementedInterfaces方法。

+0

這很漂亮 - 謝謝! – n8wrl