Quando usi un contenitore IoC, in questo modo:
var svc = IoC.Resolve<IShippingService>();
 In che modo il contenitore IoC sceglie quale implementazione di   IShippingService    istanziare? 
Inoltre, se sto chiamando quanto sopra per sostituire il codice equivalente:
var svc = new ShippingService(new ProductLocator(), 
   new PricingService(), new InventoryService(), 
   new TrackingRepository(new ConfigProvider()), 
   new Logger(new EmailLogger(new ConfigProvider())));
 Suppongo che   ProductLocator   ,   PricingService   , ecc. vengano richiamati nei parametri del costruttore come interfacce, non come classi concrete. In che modo il contenitore IoC sa quali implementazioni di   IProductLocator   ,   IPricingService   , ecc. Per istanziare? 
 Il contenitore IoC è abbastanza intelligente da usare lo stesso   ConfigProvider    per entrambe le dipendenze (se questo è il requisito)?