public static void Main()
IKernel kernel = new StandardKernel();
kernel.Bind<IServiceA>().To<ServiceA>().Named("legacy");
kernel.Bind<IServiceA>().To<RoutingService>().Named("routing");
kernel.Bind<IServiceB>().To<WhateverServiceB>();
var legacyServiceA = kernel.Get<IServiceA>("legacy");
var routingServiceA = kernel.Get<IServiceA>("routing");
routingServiceA.DoWork();
(routingServiceA as RoutingService).MethodA("Zooo legacy-ish!");
(routingServiceA as RoutingService).MethodA("Do something new and fancy");
public interface IServiceA
public class ServiceA : IServiceA
public void DoWork() { Console.WriteLine("I am your legacy!"); }
public interface IServiceB
public class WhateverServiceB : IServiceB
public WhateverServiceB() { }
public void DoWork() { Console.WriteLine("Whatever..."); }
public interface IRoutingService
void MethodA(string code);
public class RoutingService : IRoutingService, IServiceA
private readonly IServiceA _serviceA;
private readonly IServiceB _serviceB;
public RoutingService([Named("legacy")] IServiceA serviceA, IServiceB serviceB)
this._serviceA = serviceA;
this._serviceB = serviceB;
public void MethodA(string code)
if (code.StartsWith('Z'))
public void DoWork() { Console.WriteLine("I don't know what I'm supposed to do :/"); }