Skip to content

Constructor Injection

Constructor InjectionΒΆ

interface IDependency1 {}
interface IDependency2 {}
interface IDependency3 {}
interface IDependency4 {}

class ViewModel
{
    public ViewModel(   IDependency1 d1,
                        IDependency2 d2,
                        IDependency3 d3,
                        IDependency4 d4)
    {
    }
}
class Infrastructure : IInfrastructure
{
    public Infrastructure(   IDependency1 d1,
                        IDependency2 d2,
                        IDependency3 d3,
                        IDependency4 d4)
    {
    }
}

class ViewModel
{
    public ViewModel(IInfrastructure infrastructure)
    { }
}
  • Non-obligatory dependencies
public class Customer {
    private ILogger _logger = new Logger();

    public Customer() {}
    public Customer(ILogger logger) {
        _logger = logger;
    }
}
  • 3rd party framework imposes a public [[default constructor]]
public class Customer {
    private ICustomerRepo _repo;

    // have to expose
    public Customer() {}

    public Customer(ICustomerRepo repo) {
        _repo = repo;
    }
}
  • A certain dependency is used only in a single method