I want to provide the constructor arguments to the following class via the container but am unable to find a way of registering the multiple auto factories.
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;
If I wanted to have multiple types of items I could register them as
GlobalContainer.RegisterType<IItem,TItem1>('Item1');
GlobalContainer.RegisterType<IItem,TItem2>('Item2');
If I only had one type of item I could easily
GlobalContainer.RegisterType<IItem,TItem1>;
GlobalContainer.RegisterFactory<Func<IHost,IItem>>;
But I can see there is no point in naming multiple auto factories as they only reference IItem and not TItem1 or TItem2.
Simple, look at the parameters of RegisterFactory
, there are two overloads where you can specify the resolvedServiceName
.
GlobalContainer.RegisterFactory<Func<IHost, IItem>>('ItemFactory1', 'Item1');
GlobalContainer.RegisterFactory<Func<IHost, IItem>>('ItemFactory2', 'Item2');