public static void Main()
var container = new Container();
container.Register<ControllerA>();
container.Register<ControllerB>();
container.Register<ControllerC>();
container.Register<IMyService, MyServiceA>(Reuse.Singleton, setup: Setup.With(condition: request => request.DirectParent.GetActualServiceType() == typeof(ControllerA)));
container.Register<IMyService, MyServiceB>(Reuse.Singleton, setup: Setup.With(condition: request => request.DirectParent.GetActualServiceType() == typeof(ControllerB)));
container.Register<IMyService, MyServiceAll>(Reuse.Singleton);
var a = container.Resolve<ControllerA>();
var b = container.Resolve<ControllerB>();
var c = container.Resolve<ControllerC>();
Console.WriteLine("Type of dependency in a is " + a.S.GetType().Name);
Console.WriteLine("Type of dependency in b is " + b.S.GetType().Name);
Console.WriteLine("Type of dependency in c is " + c.S.GetType().Name);
record MyServiceA : IMyService {}
record MyServiceB : IMyService {}
record MyServiceAll : IMyService {}
record ControllerA(IMyService S) {}
record ControllerB(IMyService S) {}
record ControllerC(IMyService S) {}