如何正确使用属性在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的默认值
1条答案
按热度按时间laik7k3q1#
不支持您正在尝试的操作。
我想你是在追求一个像温莎城堡那样的功能。
它看起来是一个很好的功能,我会考虑在未来添加。
目前你必须自己实现工厂,因为容器构建的自动工厂不支持这一点。