问题标签 [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.

0 投票
2 回答
388 浏览

c# - 有没有办法创建嵌套的开放泛型类型?

在 C# 中,很容易创建一个开放的泛型类型,typeof(IEnumerable<>). 有没有办法创建一个包含开放泛型的类型?以下不起作用:typeof(IEnumerable<IFoo<>>)

0 投票
1 回答
990 浏览

c# - AutoMapper 打开泛型映射不起作用

我正在尝试设置一个地图以利用开放的泛型,但它在运行时从不工作。我在 .NET Core 中使用 AutoMapper 5.2。

我有这些模型:

我希望能够从一个 RestData<T> 映射到另一个 RestData<T> ,其中 T 不一定相同。我创建了一个看起来像这样的 AutoMapper.Profile(使用界面):

我也这样尝试过(使用具体类型):

这就是我的 RestDataConverter 的样子:

我正在尝试在特定对象类型的两个集合之间进行映射(来源:RestData<List<DocumentRecord>>,dest:RestData<List<Document>>)。这是我的模型类型:

这是这两种对象类型的 AutoMapper.Profile:

我在 Startup.cs 中加载配置文件:

每当我做地图时,我都会得到这个异常:

此外,当我尝试做一些更简单的事情(来源:RestData<int>,dest:RestData<int>)例如这个单元测试时,我得到了一个类似的异常:

相同的基本例外:

0 投票
1 回答
314 浏览

c# - Castle Windsor 注册开放泛型 ILogger

我有我的简单注射器注册:

我需要使用 Castle Windsor 在不同的项目中注册相同的 LogManager。

我努力了

不能让它工作。

0 投票
1 回答
296 浏览

inversion-of-control - 如何自动向 Castle Windsor 注册开放的通用接口?

我需要自动将我的开放通用接口注册到它的实现类我的接口类似于 IIntegrationEventHandler

我的处理程序将是这样的

Castle Windsor 中是否有任何通用方法可以在不手动对每个处理程序进行注册的情况下进行此类注册,我搜索了很多但没有注意到我没有基本处理程序类,只有通用接口和实现类

0 投票
1 回答
1724 浏览

c# - 如何使用 Autofac 注册开放通用接口的所有实现

我目前有一个用于管道中单个步骤的接口。

我有一大堆实现这个接口的步骤:

我目前正在像这样注册它们:

然后我可以使用 autofac 来实例化这些步骤。问题是,我有很多很多步骤。每次我创建一个新的时都必须注册每一个,这非常令人沮丧。

有没有办法一次性注册?

我知道您可以使用程序集扫描和AsClosedTypesOf,但这似乎不适用于开放通用接口的开放通用实现。

我尝试过的事情:

AsClosedTypesOf当接口的实现还必须包含泛型时,有什么办法可以使用吗?

提前致谢

0 投票
1 回答
737 浏览

c# - AutoMapper 是否支持从非泛型基类继承的开放泛型?

AutoMapper 版本号为 7.0.0。

参加以下一组课程:

Person有一个BarList类型的属性List<BarBase>BarBase是一个具有通用具体实现的抽象类Bar<T>;该列表需要包含多种类型的T.

以下两种配置有效。注释掉的部分不像注释中解释的那样工作。

要验证任一配置是否有效:

问题:如果没有转换器(“ConvertUsing”)或通过显式映射每个封闭的泛型类型,我无法让 AutoMapper 的开放泛型适用于这种情况(Generic<T>扩展)。Non-Generic

问题:我错过了什么?-是否有一个开箱即用的类型映射配置我可以在这里使用而不使用转换器?

0 投票
2 回答
75 浏览

generics - C#:通过开放泛型方法/类构造开放泛型接口的类型约束半封闭泛型实现

我正在尝试构建一个开放的通用存储库接口的实例,从而实现比接口施加更严格的类型约束。存储库接口的每个实现都需要泛型类型的特定实现,以根据传递的类型的属性处理某些方法/操作(为简洁起见未显示)。

以下是该场景的综合示例:

我最初尝试通过一个 IOC 容器(Castle Windsor,以防有人想知道)运行该场景,认为它会自动找出类型约束,但是,这是不可能的(或者至少不是它处理开放泛型和依赖注入的方式)。我想我可以使用自定义工厂来构建接口实现。

问题出在与模式匹配的行中return new XYZRepository<T>();,我不确定如何让 c# 编译器将泛型类型“T”传递给它,因为我知道它将完全满足类型约束。我确信这可以通过反射来完成,但我只找到了有关如何构建方法和属性的信息,而不是泛型类。这怎么可能实现?

我不能对接口、存储库实现或模型进行任何更改……以防万一有人提出这个建议。

0 投票
0 回答
195 浏览

c# - 如何为封闭泛型的闭包类型的完整层次结构解析所有服务类型

我最近开始使用,从迁移出来。使用以前的依赖注入工具,解决所有在给定类型的完整层次结构(所有接口和基类)上关闭的服务似乎相当简单。

例如结构图/拉马尔只需扫描

解决问题只是GetAllInstances呼吁context

但是, autofac似乎并非如此。除非我遗漏了一些文档和误解方法,否则我似乎需要跳过许多反射调用才能手动确定我的服务类型的类型层次结构是什么,关闭每个发现的类型的泛型,关闭该泛型一个IEnumerable,最后Resolve在每个关闭时打一个电话IEnumerable

下面是我的方法,我想确保它是有效的,而不是重新实现现有的功能

鉴于我们最喜欢的多态动物示例

我想发现 ( Resolve) 所有可以喂食动物的喂食器,定义如下

例如:

  • ADogFeeder可以同时喂DogWolf,但不能Cat
  • 可以ObjectFeederDog, Wolf, Cat, 但不能IAnimal
  • AnimalFeeder罐头喂食, Dog, Wolf,CatIAnimal
  • 等等

为了证明这一点,我编写了一个Resolve理论,其中包含基于静态ResolutionHelper类 ( )的自定义反射ResolveManyClosedGenericsOfTypeHierarchy来完成我的解决方案

我是否跳了篮球,我不应该让这发生?

只是为了保持一致性,这是我用于 DTO 验证的方法,其中动物是各种类型的 DTO,而“饲养者”是 DTO 验证的明确单元。

0 投票
3 回答
2623 浏览

typescript - TypeScript 中的高阶类型函数?

请考虑以下伪代码尝试使用函数类型参数定义高阶类型函数M<?>

M<?>在语法上是不正确的 TypeScript,但将类型签名声明为会在第二行HigherOrderTypeFn<T, M>产生错误。Type 'M' is not generic. ts(2315)

假设这种类型目前在 TS 中无法表示,我是否正确?

0 投票
1 回答
54 浏览

c# - 使用带有元组的开放泛型在 AutoMapper 10 中不起作用

我有以下两个 POCO:

然后我定义了两个人:

这是我尝试执行的代码:

在执行时,我收到一个 AutoMapperMappingException,说我缺少类型映射配置或不支持映射。我希望我可以利用开放的泛型特性,而不必注册每个 Tuple 版本。如果我明确地这样做,那么一切正常。我错过了什么吗?

我正在使用 AutoMapper v10。