1

我試圖在asp core中實現repository pattern。一切似乎都很好地工作與一些調整,除了將它添加到控制器:在上下文中沒有提供參數

public class HomeController : Controller 
    { 
     private IDocumentRepository _context; 

     public HomeController() 
     { 
      _context = new DocumentRepository(new myContext()); 
     } 
} 

DocumentRepository.cs

public class DocumentRepository : IDocumentRepository, IDisposable 
{ 

    private myContext context; 

    public DocumentRepository(myContext context) : base() 
    { 
     this.context = context; 
    } 

    public IEnumerable<Document> GetDocuments() 
    { 
     return context.Document.ToList(); 
    } 

    public Document GetDocumentByID(int id) 
    { 

     return context.Document.FirstOrDefault(x => x.Id == id); 
    } 

IDocumentRepository.cs

public interface IDocumentRepository : IDisposable 
{ 
    IEnumerable<Document> GetDocuments(); 
    Document GetDocumentByID(int documentId); 
    void InsertDocument(Document student); 
    void DeleteDocument(int documentID); 
    void UpdateDocument(Document document); 
    void Save(); 
} 

的錯誤

沒有給定參數對應的 「myContext.myContext(DbContextOptions)所要求的正式 參數 '選項' dotnetcore..NETCoreApp,版本= V1.0

+0

什麼線路上的錯誤(在錯誤報告時,總是把錯誤的確切位置),什麼是'mycontext'的代碼?它看起來像'mycontext'要求你傳遞一個'DBContextOptions'類型的對象給你不是的構造函數,但它很難從你提供的代碼中確定... – Chris

+2

'myContext'需要一個options參數構造函數說,你應該讓框架爲你擔心,ASP.Net Core很大程度上依賴於依賴注入,你也應該如此。 – DavidG

+0

另外值得一提的是,Entity Framework並不需要存儲庫模式,[本答案](http://programmers.stackexchange.com/a/220126/145181)有一個很好的解釋。 – DavidG

回答

2

簡單的解決IDocumentRepository從DI容器使用構造器注入,而不是手動實例化它,它應該工作:

public class HomeController : Controller { 
    private IDocumentRepository _repository; 

    public HomeController(IDocumentRepository repository) { 
     _repository = repository; 
    } 
} 

對於這一點,你需要確保IDocumentRepository正確註冊在ConfigureServices

public void ConfigureServices(IServiceCollection services) { 
    services.AddScoped<IDocumentRepository, DocumentRepository>(); 
} 
+2

不要忘記首先將它添加到DI容器中。 – DavidG

+0

好點,謝謝。我會更新我的答案以反映這一點。 – Pinpoint

相關問題