Updated: 10 January 2025
From Stackoverflow
Constructor injection
public class Foo
{
  private IBar bar;
  public Foo(IBar bar)
  {
    this.bar = bar;
  }
}Service locator
public class Foo
{
  private IBar bar;
  public Foo()
  {
    this.bar = Container.Get<IBar>();
  }
}With service locator the application class asks for it explicitly by a message to the locator. With injection there is no explicit request, the service appears in the application class – hence the inversion of control.
—Martin Fowler.
- An object should not know how to construct its dependencies.
- The Inversion of Control Container is also known as a Dependency Injection Container.