You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何注册嵌套泛型类型?解决“Unexpected use of an unbound generic name”错误

解决泛型服务注册时“意外使用未绑定泛型名称”的错误

问题场景

我尝试注册泛型命令处理程序:

services.AddTransient(typeof(IRequestHandler<MyCommand<>>), typeof(MyCommandHandler<>));

编译器抛出错误:

Unexpected use of an unbound generic name

我的命令处理程序定义如下:

public class MyCommandHandler<T> : IRequestHandler<MyCommand<T>> where TPayload : class

错误出现在typeof(IRequestHandler<UitvalCommand<>>)这段代码中(注:此处应为笔误,与前文MyCommand对应)

问题原因

C#不支持直接使用嵌套的未绑定泛型类型(比如IRequestHandler<MyCommand<>>)来获取Type对象。MyCommand<>属于未绑定泛型,将其作为另一个泛型接口的类型参数时,编译器无法直接解析这种写法。

解决方案

需要通过Type.MakeGenericType方法手动构造嵌套的泛型类型:

// 获取未绑定的泛型接口和命令类型
var requestHandlerType = typeof(IRequestHandler<>);
var myCommandType = typeof(MyCommand<>);

// 构造IRequestHandler<MyCommand<>>的Type对象
var genericHandlerType = requestHandlerType.MakeGenericType(myCommandType);

// 注册泛型服务
services.AddTransient(genericHandlerType, typeof(MyCommandHandler<>));

这样就能实现“不指定具体泛型参数注册泛型类型”的需求。另外注意你的MyCommandHandler<T>定义里的约束写的是where TPayload : class,这里大概率是笔误,建议改成where T : class以匹配泛型参数逻辑。

内容的提问来源于stack exchange,提问作者Martijn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:59:53