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
相关产品推荐
相关产品推荐

