因为我无法评论这个问题的答案Castle Windsor resolve 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 顺便说一句。
经过一番调查,我可以看到有一个错误
DefaultNamingSubSystem.GetHandlersNoLock(Type service)
或者
AbstractHandler.Supports(Type service)
由于我的实现被注册为封闭接口 IBaseInterface 但 Supports() 方法检查
ComponentModel.Services.Contains(service); // here service = IBaseInterface<,>
显然 Castle 在我的组件服务中找不到开放的通用服务