Thread safe singleton design pattern

This pattern is one of the best known patterns. This pattern allows only a single instance of itself to be created and gives access to this instance.

Usually you can create it this way:

public class Singleton
{
private Singleton()
[...]

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 [...]