Обычно я бы сделал это:
public class DBFactory
{
public UserDAO GetUserDao()
{
return new UserDao();
}
}
Где UserDao - конкретная реализация IUserDao.
Так что теперь мой код будет усеян:
DBFactory factory = new DBFactory();
IUserDao userDao = factory.GetUserDao();
User user = userDao.GetById(1);
Теперь, если бы я хотел поменять местами реализации, мне нужно было бы перейти к моей DBFactory и изменить мой код для вызова другой реализации.
Теперь, если бы я использовал NINject, я связывал бы конкретную реализацию при запуске приложения или через файл конфигурации. (или привязка на основе определенных параметров и т. д. и т. д.).
И это все? Или есть еще?
(причина, по которой я спрашиваю, хочу ли я узнать, как это мне поможет, здесь: Помощь в разработке класса менеджера заказов )