Эта ошибка не связана с UnitOfWork. Это происходит из-за вашего контроллера StudentController
и проверяет конструктор этого контроллера
public StudentController(StudentService service)
Вашему контроллеру требуется экземпляр StudentService
, и вы не регистрируете зависимость для этого класса StudentService
. Контроллеру Asp.Net MVC не требуется конструктор параметров или если у вас есть какая-либо зависимость, то это необходимо разрешить до создания контроллера.
Решением является создание интерфейса для класса StudentService
.
public interface IStudentService
{
IEnumerable<StudentView> GetStudentViews();
}
и обновите класс StudentService
для реализации этого интерфейса
public class StudentService : IStudentService
{
private readonly IUnitOfWork _db;
public StudentService(IUnitOfWork uow)
{
_db = uow;
}
public IEnumerable<StudentView> GetStudentViews()
{
List<Student> students = _db.Students.GetAll().ToList();
return Mapper.Map<List<Student>, List<StudentView>>(students);
}
}
Обновите свой регистрационный код DI, чтобы зарегистрировать эту зависимость.
public class ServiceModule : NinjectModule
{
private string connection;
public ServiceModule(string connection)
{
this.connection = connection;
}
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>().WithConstructorArgument(connection);
Bind<IStudentService>().To<StudentService>();
}
}
Обновите StudentController
и используйте IStudentService
вместо StudentService
.
public class StudentController : Controller
{
private readonly IStudentService _service;
public StudentController(IStudentService service)
{
_service = service;
}
// GET: Student
public ActionResult Index()
{
IEnumerable<StudentView> studentViews = _service.GetStudentViews();
return View("Index", studentViews);
}
}