问题标签 [open-generics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .NET 中的“开放泛型类型”到底是什么?
我正在学习Asp.Net MVC 课程并了解到,对于一个有资格作为控制器操作的方法,
- 它不能有“开放的泛型”
我对泛型有所了解并在一定程度上使用它们,但是:
- 什么是 .Net 中的开放泛型类型。
- 有没有封闭的泛型类型这样的东西?
- 开放泛型类型是一个不经常使用的术语。什么是使用/混淆它?
structuremap - StructureMap 错误解决 Open Generic 依赖项
所以我已经像这样在 StructureMap 中连接了我的开放通用插件
但仍然得到可怕的
没有为 PluginFamily KharaSoft.Utils.IRepository`1 定义默认实例 [[KharaSoft.App.Core.DomainObject, KharaSoft.App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]
我在容器初始化后进行调试,发现它确实注册了一个 RepositoryBase<> 的实例,所以它知道我想要做什么,但它不会为我关闭它。我在这里缺少什么吗?
c# - 数组 [] 的开放泛型类型是什么?
当我这样做int[]
时 , string[]
, T[]
- 这是一个通用数组。数组只是一个对象,就像其他所有东西一样。
那么 [] 的实际开放泛型类型是什么?我认为这只是一些语法糖,Array<>
但我找不到任何类似的东西。
如果您能在 Jon Skeet 之前以某种方式回答这个问题,则可以加分。
.net - 优先注册开放泛型
是否可以像这样使用统一:
..所以当我尝试解决时,IMyType<car>
我得到了MyType1<car>
……但是当我尝试解决时,IMyType<bus>
我得到了MyType2<bus>
?或者也许是另一种方法来做同样的事情,以便定义的泛型优先于开放的泛型?
c# - 暴露非泛型版本的泛型接口的模式
假设我有以下用于公开分页列表的界面
现在我想创建一个分页控件
T
分页控件对(列表的实际内容)没有兴趣。它只需要页数、当前页等。所以PagedListPager
通用的唯一原因是它可以使用通用IPagedList<T>
参数进行编译。
这是代码味道吗?我应该关心我实际上有一个冗余的泛型吗?
在这种情况下是否有标准模式可以公开接口的附加非泛型版本,以便我可以删除寻呼机上的泛型类型?
编辑
我想我还会添加我解决此问题的当前方式,并邀请评论它是否是一个合适的解决方案:
现在我可以传递ConcretePagedList<T>
给非泛型类/函数
structuremap - 为使用 StructureMap 实现某些接口的所有类型注册开放的泛型类型
我想注册所有实现的类型IManager
,以便它们可以用作T
泛型Lazy<T>
类的类型。
例如:
我使用自制扫描仪,因为我的具体类型和接口是内部的,因此我不能使用内置的 StructureMap 扫描机制。
在循环的第一条语句中注册我所有的IManager
类型,比如For<IRadioManager>().Singleton().Use<RadioManager>()
同样,我希望它们被注册,以便它们可以用作类似的泛型Lazy<T>
类型For<Lazy<IRadioManager>().Use<Lazy<RadioManger>>()
这可能吗?我需要如何为 StructureMap 配置它?
c# - 如何为开放的泛型类型声明变量?可能的?
有没有办法为开放的泛型类型声明一个变量?
给定:用户从工厂方法中获得了一个通用类 Logger。有没有办法拥有一个可以容纳任何记录器的变量?
现在 Logger 继承自 Logger 只是为了能够为实例声明一个变量,而无需关心那里记录的是什么类型。
我使用 MEF,在导出中我可以使用类似 [Export(typeof(Logger<>))] 的语法来导出泛型类型...(在导入时指定确切的类型),因此对开放类型有一些支持(至少在 typeof 中)。我现在需要的是这样的语法
记录器<>记录器{获取;放; }
有可能做这样的事情吗?这种特殊的语法让我“需要类型”。
c# - Autofac 装饰使用程序集扫描注册的开放泛型
我正在尝试将 autofac 装饰器支持功能应用于我的场景,但没有成功。就我而言,它似乎没有正确地将名称分配给注册。
有没有办法用名称注册扫描的程序集类型,以便我以后可以在打开的通用装饰器键中使用它?
或者也许我完全错了,在这里做了一些不恰当的事情?
c# - 获取所有实现特定开放泛型类型的类型
如何获得实现特定开放泛型类型的所有类型?
例如:
查找所有实现IRepository<>
.
dependency-injection - What is the correct way to register FluentValidation with Simple Injector?
I am able to register FluentValidation AbstractValidators
using a FluentValidatorFactory
. However, it doesn't feel right, because not all of the IoC container registrations happen during bootstrap / composition root. Instead, the fluent validators are registered by a separate factory:
The composition root:
An abstract fluent validator factory depending only on IServiceProvider
A fluent validator factory implementation for SimpleInjector
SimpleInjector has good support for open generics, and all of my fluent validator classes have signatures similar to the following:
So, is there a better way to register the validators in the bootstrap / composition root, instead of using fluent's validator factory?
P.S. @DotNetJunkie -- would be great if you had a wiki page on this at simpleinjector.codeplex.com.