Я пытаюсь немного узнать о MVC и столкнулся с проблемой при использовании 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 для предоставления строки подключения к базе данных и метода Application_Start () файла Global.asax, включив в него:
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
Я работаю над примером из книги PRO ASP .NET MVC 2, но просто не могу получить эту работу, пытался весь день.