如何在 Delphi Spring4D中使用Factory类和属性

qyswt5oh  于 2023-05-06  发布在  Spring
关注(0)|答案(1)|浏览(106)

如何正确使用属性在IDogFactory接口中为IDog接口创建不同的实现?是否可以使用工厂接口为一个接口创建不同的实现?

type
  IDog = interface
    function GetName: string;
    procedure Test;
  end;

  IDogFactory = interface(IInvokable)
    [TTola]
    function CreateTola: IDog;
    [TRudy]
    function CreateRudy: IDog;
  end;

  IFamillyDog = interface
    function Dogs: IList<IDog>;
    function Count: Integer;
  end;

  TTola = class(TInterfacedObject, IDog)
  public
    constructor Create;
    function GetName: string;
    procedure Test;
  end;

  TRudy = class(TInterfacedObject, IDog)
  public
    constructor Create;
    function GetName: string;
    procedure Test;
  end;

  TFamillyDog = class(TInterfacedObject, IFamillyDog)
  private
    fDogs: IList<IDog>;

    function Dogs: IList<IDog>;
    function Count: Integer;
  public
    constructor Create(aFactory: IDogFactory);
  end;

Tree:
 
  C.RegisterType<IDog, TTola>('Tola');
  C.RegisterType<IDog, TRudy>('Rudy');
  C.RegisterType<IFamillyDog, TFamillyDog>;
  C.RegisterType<IDogFactory>.AsFactory;

我试图运行示例代码更改细节,我总是得到错误:
未找到类型IDog的默认值

laik7k3q

laik7k3q1#

不支持您正在尝试的操作。
我想你是在追求一个像温莎城堡那样的功能。
它看起来是一个很好的功能,我会考虑在未来添加。
目前你必须自己实现工厂,因为容器构建的自动工厂不支持这一点。

相关问题