2014-01-26 2 views
0

У меня есть эта ошибка, так как название упоминается, что вызывает этот человек? heres my code Я просто хочу отображать файлы из базы данных SQL, но у него есть какая-либо ошибка? благодаря!WebAPI и mvc4 Произошла ошибка Тип «.Controllers.APICategoryController» не имеет конструктора по умолчанию

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; } 
} 
+0

Я знаю, что вы задаете конкретный вопрос ... но вы действительно должны рассмотреть шаблон репозитория. Вот лучший пример, который я когда-либо видел. https://github.com/johnpapa/CodeCamper – hidden

ответ

0

вам нужно добавить конструктор по умолчанию. Вы должны добавить это APICategoryController (это конструктор по умолчанию)

public APICategoryController() 
    { 
    } 
+0

Я добавил, но похоже, что ссылка объекта не установлена ​​в экземпляр объекта. –

1

У вас есть один из наиболее полезных сообщений об ошибках там - APICategoryController не имеет конструктора по умолчанию, то есть: конструктор без параметров.

Вам нужно либо использовать какой-то инжектор зависимостей для вашего кода, чтобы знать, как создать конкретный класс для ICatRepository, либо предоставить конструктор по умолчанию.

например:

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

Я добавил, но появляется другая ошибка. Тип ObjectContent'1 не смог сериализовать тело ответа для типа контента «application/xml»; charset = utf-8 ' –

+0

Это отдельный вопрос. Возможно, это связано с Lazy Loading (рекурсивная сериализация по свойствам сущности) –

Смежные вопросы