3

私はAureliusORMフレームワークとSpring4Dフレームワークを統合しようとしていますが、ほとんどの場合成功していますが、Aurelius ORM(およびその他も)は、データベースへのオブジェクトのロードと保存を「オブジェクトマネージャー」に依存しています。私が行っている作業の一部は、クラスの実装とインターフェースを可能な限り分離しようとしています。ただし、このObject Manager(AureliusのTObjectManager)のインターフェイスを作成するときに、ObjectManagerの「Find」メソッドを実装するのに問題があります。たとえば、オブジェクトマネージャは次のメソッドをサポートしています。

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

基本的に、自分のObjectManagerで呼び出すことができるインターフェイス関数を考え出す必要があります。次に例を示します。

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 に答える