• По умолчанию для работы контроллеров требуется конструктор без параметров.Если вы не хотите сохранять неиспользуемый конструктор без параметров в контроллере, вы можете:
переопределить DefaultControllerFactory и связать его, чтобы он возвратил новый экземпляр контроллера сваши зависимости.
public class CustomControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
if (controllerType == typeof(StudentController)) {
return new StudentController(new StudentRepository());
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
Затем зарегистрируйте новый завод в global.asax
ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());
Имейте в виду, что для каждого контроллера вам необходимоподключите зависимости самостоятельно.
Лучшим подходом является использование
IoC Container
, например
StructureMap
, для подключения зависимостей.
Просто установите следующий пакет StructureMap.MVC5.Update
.
Если ваши зависимости следуют стандартному соглашению IDependency
для интерфейсов и Dependency
для реализаций, они будут автоматически обнаружены и подключены StructureMap
.
Если вам нужно привязать определенную зависимость, перейдите к DefaultRegistry.cs
и добавьте свои зависимости.
• Закомментированный код возвращает исключение нулевой ссылки, поскольку вы не передаете модель обратно в представление
var list = x.ToList();
return View(list); //pass the list back