使用Castle注入具有非泛型实现的开放泛型接口



我有一个开放的泛型接口,我用一个非泛型类实现它,我想用castle windsor注入这个类,但我很难。。。。。

比方说我有以下接口

public interface IMyInterface<T>
{
    bool DoSomething(T param);
}

然后我有下面的类来实现这个接口,就像一样

public class MyClass : IMyInterface<string>
{
    public bool DoSomething(string param)
    {
        // Do Something
        return true;
    }
}

我希望能够像这样使用castle来解析接口,以便injectedObject成为MyClass的实例。

WindsorContainer container = new WindsorContainer(new XmlInterpreter(newConfigResource("castle")));
IMyInterface<string> injectedObject = container.Resolve<IMyInterface<string>>();

这可能吗,或者我有点偏离轨道了?如果可能的话,我该如何设置城堡配置部分?我曾尝试使用"1"表示法来指示接口是一个开放的泛型类型,但如果实现不是泛型,则会出现错误,在本例中不是。

感谢的任何帮助

我们在团队中使用fluent接口,所以我已经有一段时间没有研究配置文件语法了。基本原理是:您的服务是IMyInterface<string>,实现类型是MyClass。所以我认为应该是这样的:

<component service="Namespace.IMyInterface`1[[System.String, mscorlib]], AssemblyName"
        type="Namespace.MyClass, AssemblyName" />

你说你犯了一个错误。错误是什么?我想这是因为您在没有提供类型参数的情况下将服务定义为IMyInterface<>。如果你想这样做,正如你的问题所暗示的那样,实现类型也必须是通用的:

<component service="Namespace.IMyInterface`1, AssemblyName"
        type="Namespace.MyGenericClass`1, AssemblyName" />

请注意,您可以注册这两个组件。如果这样做,解析IMyInterface<string>将获得MyClass的实例,而解析IMyInterface<AnyOtherType>将获得MyGenericClass<AnyOtherType>的实例。

最新更新