3

我正在尝试集成 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;

感谢任何人的帮助,几天来一直试图提出一个灵魂。

4

1 回答 1

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;

希望它可以帮助某人。

于 2012-05-04T23:59:41.363 回答