我正在研究Pro ASP.Net Book MVC3 Framework,突然间我遇到了这个问题。
我附加了产品控制器的代码。好像问题就在这里:
另外,我为NinjectController添加了代码。非常感谢代码的任何帮助。
namespace NordStore.WebUI.Controllers{
public class ProductController : Controller
{
private IProductRepository repository;
public ProductController(IProductRepository productRepository)
{
repository = productRepository;
}
public ViewResult List()
{
return View(repository.Products);
}
}
}
namespace NordStore.WebUI.Infrastructure{
public class NinjectControllerFactory: DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext,
Type controllerType)
{
return controllerType == null
? null
: (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
// put additional bindings here
ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
}
}
}
答案 0 :(得分:0)
您的构造函数采用IProductRepository类型的参数。你可能试图像这样实例化你的控制器:
ProductController controller = new ProductController();
但是你不能,因为你的控制器中没有定义带有0个参数的构造函数。您需要传递IProductRepository类型的对象或定义无参数构造函数。
答案 1 :(得分:0)
请查看Unity或Ninject等依赖注入框架。
同时让你的代码运用你的穷人的DI方法:
假设ProductRepository
来自IProductRepository
public class ProductController : Controller
{
private IProductRepository repository;
//The framework will call this constructor
public ProductController() : this(new ProductRepository()) { }
public ProductController(IProductRepository productRepository)
{
repository = productRepository;
}
public ViewResult List()
{
return View(repository.Products);
}
}