C# Castle Windsor-开放通用接口的IoC注册?
Castle Windsor是否允许注册开放的泛型接口,或者我是否需要单独注册每个可能的类型化实例 示例-以下类型为T,Z的示例在编译时失败,除非我单独指定T,Z为强类型C# Castle Windsor-开放通用接口的IoC注册?,c#,.net,inversion-of-control,castle-windsor,ioc-container,C#,.net,Inversion Of Control,Castle Windsor,Ioc Container,Castle Windsor是否允许注册开放的泛型接口,或者我是否需要单独注册每个可能的类型化实例 示例-以下类型为T,Z的示例在编译时失败,除非我单独指定T,Z为强类型 container.Register(Component .For<IAdapterFactory<T,Z>>() .ImplementedBy<AdapterFactory<T,Z>>() .LifeStyle.PerWebRequest)
container.Register(Component
.For<IAdapterFactory<T,Z>>()
.ImplementedBy<AdapterFactory<T,Z>>()
.LifeStyle.PerWebRequest);
container.Register(组件
.对于()
.由()实施
.生活方式。个人网络请求);
它被称为开放泛型,是的,温莎确实支持这一点
container.Register(Component
.For(typeof(IAdapterFactory<,>))
.ImplementedBy(typeof(AdapterFactory<,>))
.LifestylePerWebRequest());
container.Register(组件
.For(类型(IAdapterFactory))
.实施人(类型(适配器工厂))
.LifestylePerWebRequest());
“强类型”不是一个准确的描述,因为模板在C#中确实使用强类型。我的观点是Castle Windsor似乎不接受注册模板,因此我似乎需要枚举constrolleristaller.cs中所有可能的类型,以便针对多个可能的类型调用注册相同的IAdapterFactory。看起来很奇怪。这不是温莎的限制,而是.NET运行时的工作方式。你能说得更多吗?“这不是Windsor的限制,而是.NET运行时的工作方式”您不能在非关闭的泛型类型上关闭泛型方法(如Component.For
)。这就是.NET泛型的工作方式。看看这里有没有更多的见解一个词:哇。非常感谢。出于好奇,我想知道为什么Castle的人们决定偏离更标准的C#语法——而不是?这是唯一一种在这种情况下有效的语法,它与Windsor无关。这就是您获取表示开放泛型类型的System.Type
实例的方式。这可能是这个答案第五次帮助我了