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 theresolvedServiceName.