简体   繁体   English

Delphi Spring框架注册泛型类型

[英]Delphi Spring framework register generic type

Using the Delphi Spring framework, is it possible to register a generic type with the GlobalContainter? 使用Delphi Spring框架,是否可以使用GlobalContainter注册泛型类型? I'm trying to do something like this: 我正在尝试做这样的事情:

TMyBaseType = class
protected
  FName: string;
  function GetName: string; virtual;
  procedure SetName(Value: string); virtual;
public
  property Name: string read GetName write SetName;
end;

TMyFirstThing = class(TMyBaseType)
protected
  function GetName: string; override;
end;

TMySecondThing = class(TMyBaseType)
protected
  procedure SetName(Value: string); override;
end;

TMyGenericType<T: TMyBaseType> = class
public
  procedure DoSomethingWithIt(AObject: T);
  function GetTheSomethingsName(AObject: T): string;
end;

// I now want to be able to use the ServiceLocator to get me an instance
// such as TMyGenericType<TMyFirstThing> or TMyGenericType<TMySecondThing>
// but I cannot figure out how to register TMyGenericType<>

......

initialization
  GlobalContainer.RegisterType<TMyGenericType<>>;
// this line fails with the messages:
// [DCC Error] E2251 Ambiguous overloaded call to 'RegisterType'
// [DCC Error] E2531 Method 'RegisterType' requires explicit type argument(s)

I'm not sure if what I'm trying to do is possible or if there's a better/alternative way to do it? 我不确定我想要做的是否可行,或者是否有更好的/替代的方法来做到这一点? I'm using Delphi 2010 with the latest Spring4D framework. 我正在使用Delphi 2010和最新的Spring4D框架。 (I also have Delphi XE5 but the project itself is still 2010 due to 3rd party libraries). (我也有Delphi XE5,但由于第三方库,该项目本身仍然是2010年)。 Any ideas or suggestions would be most appreciated. 任何想法或建议将非常感激。

Delphi does not have unbound (or open) generic types (something like TMyGenericType<> . Delphi没有未绑定(或开放)泛型类型(类似于TMyGenericType<>

In your case you have to register every closed constructed generic type ( TMyGenericType<TMyFirstThing> , TMyGenericType<TMySecondThing> , ...) individually. 在您的情况下,您必须TMyGenericType<TMyFirstThing>注册每个封闭的构造泛型类型( TMyGenericType<TMyFirstThing>TMyGenericType<TMySecondThing> ,...)。

More informations about the differences of generics in C#, C++ and Delphi: http://blogs.teamb.com/craigstuntz/2009/10/01/38465/ 关于C#,C ++和Delphi中泛型差异的更多信息: http//blogs.teamb.com/craigstuntz/2009/10/01/38465/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM