WebAPI和mvc4发生错误类型'.Controllers.APICategoryController'没有默认构造函数

时间:2014-01-26 13:04:28

标签: c# asp.net-mvc-4 asp.net-web-api

我有这个错误作为标题提及,是什么原因导致这个人?继承我的代码 我只是想显示SQL数据库中的文件,但它确实有任何帮助的错误?谢谢!

    namespace a.Models

public interface ICatRepository
{
    IEnumerable<Category> GetAll();
    Category Get(int id);
    Category Add(Category item);
    void Remove(int id);
    bool Update(Category item);
}

另一个存储库

namespace a.Models

public class CatRepository : ICatRepository
{

    private istellarEntities db = new istellarEntities();

    public CatRepository()
    {
    }

    public IEnumerable<Category> GetAll()
    {
        return db.Categories;
    }

    public Category Get(int id)
    {
        return db.Categories.Find(id);
    }

    public Category Add(Category category)
    {
        db.Categories.Add(category);
        db.SaveChanges();
        return category;
    }

    public void Remove(int id)
    {
        Category category = db.Categories.Find(id);
        db.Categories.Remove(category);
        db.SaveChanges();
    }

    public bool Update(Category category)
    {
        db.Entry(category).State = EntityState.Modified;
        db.SaveChanges();
        return true;
    }
}

控制器

namespace a.Controllers

public class APICategoryController : ApiController
{
   // static readonly ICatRepository repository = new CatRepository();

 private readonly ICatRepository repository;

 public APICategoryController(ICatRepository repository)
    {
        if (repository == null)
        {
            throw new ArgumentNullException("repository");
        }
        this.repository = repository;
    }
    public IEnumerable<Category> GetAllCategories()
{
    return repository.GetAll();
}

最后是我的班级文件

namespace a.Models

using System;
using System.Collections.Generic;

public partial class Category
{
    public Category()
    {
        this.IQuestions = new HashSet<IQuestion>();
    }

    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public virtual ICollection<IQuestion> IQuestions { get; set; }
}

2 个答案:

答案 0 :(得分:1)

你有一个更有用的错误信息--APICategoryController没有默认构造函数,即:无参数构造函数。

您需要使用某种Dependency Injector为您的代码知道如何为ICatRepository实例化具体类,或者提供默认构造函数。

例如:

     //a default constructor instantiating a concrete type. Simple, but no good for testing etc.
     public APICategoryController()
     {
         ICatRepository repository = new ConcreteRepository;
         this.repository = repository;
     }

答案 1 :(得分:0)

您需要添加默认构造函数。你应该把它添加到APICategoryController(这是默认构造函数)

  public APICategoryController()
  {
  }