如何在Spring Framework中使用的接口中实现参数化方法

时间:2012-05-04 15:55:28

标签: delphi interface spring4d

我正在尝试集成Aurelius ORM框架和Spring 4D框架,并且我在很大程度上取得了成功,但是Aurelius ORM(以及其他人)也依赖于“对象管理器”来加载和保存对象。数据库。我正在做的部分工作是尝试尽可能多地分离类的实现和接口。但是,在为此对象管理器(Aurelius中的TObjectManager)创建接口时,我很难实现对象管理器的“查找”方法。例如,对象管理器支持以下方法:

MyObjectManager := TObjectManager.Create(Connection);
ExistingSale := MyObjectManager.Find<TSale>(1); // Find the Sale record with ID = 1 of the class TSale.

现在尝试将ObjectManager声明转换为接口我尝试按以下方式执行:

IObjectManager = Interface
     ['{1F54162B-D7D7-4E42-AC9D-D269803371DB}']
     function Find<T>(ID: Integer) : T;
end;

这就是存在问题的地方,因为编译器因错误而失败:

[DCC Error] E2535 Interface methods must not have parameterized methods

基本上我需要提供一个可以在我自己的对象管理器中调用的接口函数,例如:

function TMyOwnObjectManager.Find<T>(ID: Integer) : T;
begin
     Result:=fAureliusObjectManager.Find<T>(ID);
end;

感谢任何人的帮助,现在已经尝试了几天的灵魂。

1 个答案:

答案 0 :(得分:3)

好的,虽然不是我在寻找接口的解决方案,但我设法克服了从TObjectManager继承的问题并以下列方式重新声明了Find函数:

function TMyOwnManager.Find(Class: TClass; IdValue: Variant): TObject; 
begin 
    // Call the TObjectManager protected method "Find(Clazz:TClass; IdValue: Variant)" 
    Result := inherited Find(TClass(Class), IdValue); 
end;

希望它有所帮助。