Castle Windsor没有解决逆变通用接口(再次)

时间:2012-11-08 08:58:41

标签: generics castle-windsor

由于我无法在此问题Castle Windsor resolving a generic interface

中评论答案

所以我再次问它,我的设置与上面的问题完全相同。

返回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

我正在使用Castle 3.1 btw。

经过一番调查后,我发现

出现了错误
DefaultNamingSubSystem.GetHandlersNoLock(Type service)

AbstractHandler.Supports(Type service)

由于我的实现被注册为封闭接口IBaseInterface,但Supports()方法检查

ComponentModel.Services.Contains(service); // here service = IBaseInterface<,>

显然,Castle无法在我的组件服务中找到开放的通用服务

0 个答案:

没有答案