C# Castle Windsor-将泛型实现解析为基类型

C# Castle Windsor-将泛型实现解析为基类型,c#,generics,castle-windsor,C#,Generics,Castle Windsor,我试图使用Windsor作为工厂,提供基于XAbstractBase子类型的规范实现,在我的例子中,XAbstractBase是一个抽象消息基类 我有如下代码: public abstract class XAbstractBase { } public class YImplementation : XAbstractBase { } public class ZImplementation : XAbstractBase { } public interface ISpecificatio

我试图使用Windsor作为工厂,提供基于XAbstractBase子类型的规范实现,在我的例子中,XAbstractBase是一个抽象消息基类

我有如下代码:

public abstract class XAbstractBase { }
public class YImplementation : XAbstractBase { }
public class ZImplementation : XAbstractBase { }

public interface ISpecification<T> where T : XAbstractBase
{
    bool PredicateLogic();
}

public class DefaultSpecificationImplementation : ISpecification<XAbstractBase>
{
    public bool PredicateLogic() { return true; }
}

public class SpecificSpecificationImplementation : ISpecification<YImplementation>
{
    public bool PredicateLogic() { /*do real work*/ }
}
如果没有注册更具体的实现,Windsor是否支持将通用实现分解为基类?

请参阅文章

使现代化 好吧,我现在明白你做错了什么。您没有ISpecification服务,因此温莎无法解决这一问题也就不足为奇了

这根本不是温莎的问题。

见帖子

使现代化 好吧,我现在明白你做错了什么。您没有ISpecification服务,因此温莎无法解决这一问题也就不足为奇了


这根本不是温莎问题。

您可以将其注册为开放泛型以提供后备方案,例如

public class DefaultSpecificationImplementation<T> : ISpecification<T>
    where T : XAbstractBase
{
    public bool PredicateLogic() { return true; }
}
作为


然后,当Windsor找不到特定的实现时,它将使用通用实现。您可以将其注册为开放的通用实现,以提供后备方案,例如

public class DefaultSpecificationImplementation<T> : ISpecification<T>
    where T : XAbstractBase
{
    public bool PredicateLogic() { return true; }
}
作为


然后,当温莎找不到具体的实现时,它将使用通用的

,这是我在这里发布问题之前找到的一篇更好的帖子。我要寻找的是,是否有可能解决零或多个情况。post只解决一个或多个情况,但我认为仅使用Windsor的内置工具添加默认返回值是微不足道的。如果我必须写一个工厂,我更可能只是注册它,然后像平常一样注入它;我明白为什么不可能。谢谢@adriaanp链接现在已经修复。这是我在这里发布问题之前发现的最好的帖子之一。我要寻找的是,是否有可能解决零或多个情况。post只解决一个或多个情况,但我认为仅使用Windsor的内置工具添加默认返回值是微不足道的。如果我必须写一个工厂,我更可能只是注册它,然后像平常一样注入它;我明白为什么不可能。谢谢@adriaanp链接现在已修复。
public class DefaultSpecificationImplementation<T> : ISpecification<T>
    where T : XAbstractBase
{
    public bool PredicateLogic() { return true; }
}
Component.For(typeof(ISpecification<>))
    .ImplementedBy(DefaultSpecificationImplementation<>)