Я пытаюсь немного узнать о MVC и столкнулся с проблемой при использовании Ninject. Я хочу связать репозитории, но продолжаю получать ошибку «Ссылка на объект, не установленную на экземпляр объекта».ASP MVC 2 Ninject
Я создал свой NinjectControllerFactory:
public class NinjectControllerFactory : DefaultControllerFactory
{
// A Ninject "kernel" is the thing that can supply object instances
private IKernel kernel = new StandardKernel(new SportsShopServices());
// ASP .NET MVC calls this to get the controller for each request
protected override IController GetControllerInstance(RequestContext context, Type controllerType)
{
if (controllerType == null)
return null;
return (IController) kernel.Get(controllerType);
}
// Configure how abstract sevice types are mapped to concrete implementations
private class SportsShopServices : NinjectModule
{
public override void Load()
{
Bind<IProductRepository>().To<SqlProductsRepository>()
.WithConstructorArgument("connectionString",
ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString);
}
}
}
и мой контроллер:
public class ProductsController : Controller
{
private IProductRepository productsRepository;
// Constructor used with Ninject
public ProductsController(IProductRepository _productsRepository)
{
this.productsRepository = _productsRepository;
}
public ViewResult List()
{
return View(productsRepository.Products.ToList());
}
}
Я модифицировал файл Web.config, чтобы обеспечить строку подключения к БД и Global.asax файл Application_Start ():
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
Я работаю над экзаменом e из PRO ASP.NET MVC 2 книги, но просто не может получить эту работу, пробовал весь день.
Пробовали ли вы повторно здание? Кроме того, у вас есть класс «SqlProductsRepository» в вашем решении? – donhack
Да, перепробовал. SqlProductsRepository существует, он используется для создания и возврата таблицы продуктов из базы данных. – Apollo