我有一个开放的泛型接口,我用一个非泛型类实现它,我想用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>
的实例。