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

Spring4D中无法注册TPair<String,String>?求助解决注册报错问题

解决TPair<string,string>注册报错问题

这个报错的根源在于TPair是泛型值类型,容器对它的构造函数注入需要更精准的类型匹配,或者直接换用实例注册的方式更稳妥。

方案一:直接注册实例(推荐)

如果你的需求是固定返回('A','B')这个键值对,直接注册现成的实例最省事,完全绕开构造函数匹配的问题:

var Container:=TContainer.Create;
try
  Container.RegisterInstance<TPair<String,String>>(TPair<String,String>.Create('A','B'));
  Container.Build;
  var A:=Container.Resolve<TPair<String,String>>;
  OutputDebugString(PChar(A.Key));
finally
  Container.Free;
end;

方案二:精准指定构造函数参数类型

如果必须注册类型而非实例,要明确告诉容器构造函数的参数是string类型——之前直接传字符串字面量,容器可能误判类型(比如识别成ShortString),导致找不到匹配的构造函数。用TValue.From<string>包装参数就能解决:

var Container:=TContainer.Create;
try
  Container.RegisterType<TPair<String,String>>().InjectConstructor([TValue.From<string>('A'), TValue.From<string>('B')]);
  Container.Build;
  var A:=Container.Resolve<TPair<String,String>>;
  OutputDebugString(PChar(A.Key));
finally
  Container.Free;
end;

报错原因

TPair<string,string>的构造函数需要两个string类型参数,但你之前传的字符串字面量没有明确类型标记,容器无法精准匹配构造函数,因此判定为“注册不完整”。不管是直接注册实例,还是显式指定参数类型,都能让容器正确识别你的意图,解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:20:44