То, что вы делаете здесь, это инъекция зависимостей «бедняги». Вы говорите, что если вызывающая сторона не предоставляет экземпляр, используйте этот (новый репозиторий). Итак, то, что даст вам контейнер IoC, такой как Ninject (Autofac, Windsor, Structuremap и т. Д.), - это пара вещей.
1) Если вам нужно внести быстрые изменения и изменить реализацию по умолчанию с Repository на MyAwesomeRepository, вы должны сделать это в одном месте, а не на всех разных контроллерах.
2) Вы сможете избавиться от вашего конструктора по умолчанию и иметь только тот, который использует iRepository.
Я думаю, что стоит потратить свое время на изучение использования контейнера IoC, а не на выполнение вышеуказанного.
Итак, это будет выглядеть примерно так:
//global asax
void Application_Load()
{
IKernel kernel = new StandardKernel();
kernel.Bind<iRepository>().To<Repository>();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
Здесь вы можете узнать, как заставить работать механизм разрешения зависимостей: http://www.shahnawazk.com/2010/12/dependency-injection-in-aspnet-mvc-3.html