Dependency injection design pattern.

Normally when designing some parts of the application, one classes is always depends on the other classes. For example, business logic classes (BL) are depend on data access classes (DAL).

This dependence can be in very different ways, for example, BL can  call static methods of DAL, or create instance of DAL every time it needs [...]