この質問の答えにコメントすることはできないので、CastleWindsorはジェネリックインターフェイスを解決します
もう一度質問します。上記の質問とまったく同じ設定です。
これはTrueを返します:
var res = typeof(IBaseInterface<Details1, string>).IsAssignableFrom(typeof(Impl2));
として登録されているコンポーネントがあります
Impl2 / IBaseInterface<Details, String> = Transient
しかし、私がそうするなら
var details = container.Resolve<IBaseInterface<Details1, string>>().GetDetails(new Details1());
それは惨めに失敗します:
No component for supporting the service Test.IBaseInterface`2[[Test.Details1, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] was found
Castle3.1を使用しています。
調査の結果、エラーが発生していることがわかりました。
DefaultNamingSubSystem.GetHandlersNoLock(Type service)
また
AbstractHandler.Supports(Type service)
私の実装は閉じたインターフェイスIBaseInterfaceとして登録されていますが、Supports()メソッドはチェックします
ComponentModel.Services.Contains(service); // here service = IBaseInterface<,>
明らかに、Castleは私のコンポーネントサービスでオープンジェネリックサービスを見つけることができません