我正在尝试使用类型化接口和 Spring4D,但在解决问题时遇到了一些问题。请查看下面的详细信息。
数据库对象:
unit u_DB;
type
TDBObject = class
public
property ID: TGUID;
end;
TDBCRM = class(TDBObject)
public
property SOME_FIELD: TSomeType;
end;
声明:
unit i_BaseDAL;
type
{$M+}
IBaseDAL<T: TDBObject, constructor> = interface
['{56D48844-BD7F-4FF8-A4AE-30DA1A82AD67}']
procedure RefreshData();
....
end;
unit u_BaseDAL;
type
TBaseDAL<T: TDBObject, constructor> = class(TInterfacedObject, IBaseDAL<TDBObject>)
public
procedure RefreshData();
....
end;
之后,我能够注册基本 IBaseDAL 和 IBaseDAL
GlobalContainer.RegisterType<IBaseDAL<TDBObject>>;
GlobalContainer.RegisterType<IBaseDAL<TDBCRM>>;
在项目中使用:
我现在需要解决 IBaseDAL,但找不到怎么做。只有在丑陋的方法下才能工作
DM := GlobalContainer.Resolve('i_BaseDAL.IBaseDAL<u_DB.TDBObject>@TBaseDAL<u_DBCRM.TDBCRM>').AsInterface as IBaseDAL<TDBObject>;
但我希望下面会起作用:) -
DM := GlobalContainer.Resolve(IBaseDAL<TDBCRM>);
请告知如何正确解决?