public static void Main()
c.RegisterMany(new[] { typeof(Control<>).Assembly});
.Name("a", typeof(ControlA))
.Name("b", typeof(ControlB))
.Name("c", typeof(ControlC)));
var x = c.Resolve<FooControls>();
c.Register(typeof(IControl<>), typeof(ControlA), serviceKey: Controls.A);
c.Register(typeof(IControl<>), typeof(ControlB), serviceKey: Controls.B);
c.Register(typeof(IControl<>), typeof(ControlC), serviceKey: Controls.C);
.Name("a", serviceKey: Controls.A)
.Name("b", serviceKey: Controls.B)
.Name("c", serviceKey: Controls.C));
var x = c.Resolve<FooControls>();
static void Option2_MadeOf()
c.Register(typeof(IControl<>), typeof(ControlA), serviceKey: Controls.A);
c.Register(typeof(IControl<>), typeof(ControlB), serviceKey: Controls.B);
c.Register(typeof(IControl<>), typeof(ControlC), serviceKey: Controls.C);
c.Register(Made.Of(() => new FooControls(
Arg.Of<IControl<double>>(Controls.A),
Arg.Of<IControl<double>>(Controls.B),
Arg.Of<IControl<double>>(Controls.C))));
var x = c.Resolve<FooControls>();
public interface IControl<T>
public class Control<T> : IControl<T>
public class ControlA : Control<double>
public class ControlB : Control<double>
public class ControlC : Control<double>
public FooControls(IControl<double> a, IControl<double> b, IControl<double> c)