Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Castle Windsor-开放通用接口的IoC注册?_C#_.net_Inversion Of Control_Castle Windsor_Ioc Container - Fatal编程技术网

C# Castle Windsor-开放通用接口的IoC注册?

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)

Castle Windsor是否允许注册开放的泛型接口,或者我是否需要单独注册每个可能的类型化实例

示例-以下类型为T,Z的示例在编译时失败,除非我单独指定T,Z为强类型

 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
实例的方式。这可能是这个答案第五次帮助我了