2

この質問の答えにコメントすることはできないので、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は私のコンポーネントサービスでオープンジェネリックサービスを見つけることができません

4

0 に答える 0