delphi 在Spring4D中如何为同一接口注册多个汽车工厂

noj0wjuj  于 2023-05-12  发布在  Spring
关注(0)|答案(1)|浏览(114)

我想通过容器向下面的类提供构造函数参数,但无法找到注册多个汽车工厂的方法。

TItemFactory = class(TInterfacedObject, IItemFactory)
private
  fFactories: TArray<Func<IHost,IItem>>;
protected
  function CreateInstance(Host: IHost): TArray<IItem>;
public
  constructor Create(Factories: TArray<Func<IHost,IItem>>);
end;

如果我想有多种类型的项目,我可以注册为

GlobalContainer.RegisterType<IItem,TItem1>('Item1');
GlobalContainer.RegisterType<IItem,TItem2>('Item2');

如果我只有一种类型的项目,我可以很容易

GlobalContainer.RegisterType<IItem,TItem1>;
GlobalContainer.RegisterFactory<Func<IHost,IItem>>;

但是我可以看到命名多个汽车工厂是没有意义的,因为它们只引用IItem而不是TITem1或TITem2。

xhv8bpkk

xhv8bpkk1#

简单,看看RegisterFactory的参数,有两个重载可以指定resolvedServiceName

GlobalContainer.RegisterFactory<Func<IHost, IItem>>('ItemFactory1', 'Item1');
GlobalContainer.RegisterFactory<Func<IHost, IItem>>('ItemFactory2', 'Item2');

相关问题