没有为此对象定义的无参数构造函数。确保控制器具有无参数的公共构造函数

时间:2014-03-16 15:24:48

标签: c# asp.net

我正在研究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>();
        }
    }
}

2 个答案:

答案 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);
    }

}