Unity изначально понимает массивы , поэтому нет причин делать это так сложно.Просто зарегистрируйте ILoaders
, который вы хотите включить, и разрешите графы объектов в обычном режиме. Auto-wiring позаботится обо всем остальном:
container.RegisterType<ILoader, FooLoader>("foo");
container.RegisterType<ILoader, BarLoader>("bar");
container.RegisterType<ILoader, BazLoader>("baz");
var c = container.Resolve<MyConsumer>();
при условии, что конструктор MyConsumer
определен так:
public MyConsumer(ILoader[] loaders)
Однако вы должныИмейте в виду, что (по непостижимой причине) Unity включает только названные компоненты таким образом.Компонент по умолчанию :
container.RegisterType<ILoader, Loader>();
будет не включаться в массив, так как у него нет имени.