Constructor Injection
Constructor Injection
- Protects the [[invariants]]
- Possible pitfall:
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