2011-07-18 18 views
0

私はAutoFAC 2.2.4を使用していますが、コンテナの解像度に共分散に関する質問があります。オートファックの共分散?

私は私のリポジトリの基本インタフェースの定義がありますなど、

IRepository<T, TKey> 

(処理鍵)を検索しているのfindAll()

それはこのように、例えば、使用されています。

IRepository<Catalog, int> 

意味で、カタログには整数キーがあります。私はこのようなリポジトリを登録しました:

builder.RegisterType<CatalogRepository>() 
    .As<IRepository<Catalog, int>>(); 

すべてが順調でした。私は.Find()の追加のタイプを必要と実現にその後 ので、私は新しいインターフェイスdefiend:

ICatalogRepository : IRepository<Catalog, int> 
{ 
    Catalog Find(string name); 
} 

をそして私はregisteration変更:

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