C# 使用Castle Windsor的开放泛型祖先类型注册/解析部分封闭泛型后代

C# 使用Castle Windsor的开放泛型祖先类型注册/解析部分封闭泛型后代,c#,generics,castle-windsor,windsor-facilities,C#,Generics,Castle Windsor,Windsor Facilities,使用祖先类: abstract class MyOpenGenericAncestor<T, TOptions> 抽象类myoppengenericancestor 和后代类: class MyPartiallyClosedDescendant<T> : MyOpenGenericAncestor<T, MyConcreteOptionsType> 类MyPartiallyCLOSEDgenerator:MyPengenericancestor 我希望

使用祖先类:

abstract class MyOpenGenericAncestor<T, TOptions>
抽象类myoppengenericancestor
和后代类:

class MyPartiallyClosedDescendant<T> : MyOpenGenericAncestor<T, MyConcreteOptionsType>
类MyPartiallyCLOSEDgenerator:MyPengenericancestor
我希望能够使用MyOpenEnnericator解析MyPartialCyclosedGenerator,例如:

MyOpenGenericAncestor<T, TOptions> ResolveGeneric<T, TOptions>(TOptions options)
{
    // assume options are used for stuff
    return _container.Resolve<MyOpenGenericAncestor<T, TOptions>();
}
MyOpenEnnericator ResolveGeneric(Topions选项)
{
//假设选项用于填充

return\u container.Resolve在Castle中,有用于此目的的IGenericImplementationMatchingStrategy。不幸的是,我不知道如何将其用于约定注册,所以至少这

public class MyOpenGenericAncestorMatchingStrategy : IGenericImplementationMatchingStrategy
{
    public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
    {
        return new[] { context.GenericArguments[1] };
    }
}

container.Register(Component.For(typeof(MyOpenGenericAncestor<,>))
.ImplementedBy(typeof(MyPartiallyClosedDescendant<>), new MyOpenGenericAncestorMatchingStrategy()));
公共类MyOpenEnericanStorMatchingStrategy:IGenericImplementationMatchingStrategy
{
公共类型[]GetGenericArguments(组件模型、CreationContext上下文)
{
返回新[]{context.genericalarguments[1]};
}
}
容器寄存器(组件)(类型(myopengenericator))
.implemented by(typeof(mypartiallyclosedgeneration),new myopengenericanceratchingstrategy());
public class MyOpenGenericAncestorMatchingStrategy : IGenericImplementationMatchingStrategy
{
    public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
    {
        return new[] { context.GenericArguments[1] };
    }
}

container.Register(Component.For(typeof(MyOpenGenericAncestor<,>))
.ImplementedBy(typeof(MyPartiallyClosedDescendant<>), new MyOpenGenericAncestorMatchingStrategy()));