簡體   English   中英

數據存儲庫實例Null-NullReferenceException嗎? 你調用的對象是空的

[英]Data Repository instance Null - NullReferenceException? Object reference not set to an instance of an object

我在網上看到的所有內容,都應該實例化我的倉庫的實例,我相信我已經完成了,但是我仍然收到空引用異常。

這是實現IArticleRepository接口的類。

public class ArticleRepository : IArticleRepository
    {
        private readonly ApplicationDbContext dbContext;
        public ArticleRepository(ApplicationDbContext dbContext)
        {
            this.dbContext = dbContext;
        }

        public void DeleteArticle(int articleId)
        {
            throw new NotImplementedException();
        }

        public async Task<Article> GetArticleAsync(int articleId)
        {
            Article article = await dbContext.Articles.FirstOrDefaultAsync(x => x.Id == articleId);
            return article;
        }

        public async Task<IEnumerable<Article>> GetArticles()
        {
            var articles = await dbContext.Articles.ToListAsync();
            return articles;
        }

        public void InsertArticle(Article article)
        {
            dbContext.Articles.Add(article);
        }

        public async void Save()
        {
            await dbContext.SaveChangesAsync();
        }

        public void UpdateArticle(Article article)
        {
            throw new NotImplementedException();
        }
    }

在我的控制器中,我有:

private readonly ArticleRepository _ArticleRepo;

public ArticleController(){}

public ArticleController(ArticleRepository _ArticleRepo)
{
    this._ArticleRepo = _ArticleRepo;
}

因此,我正在實例化ArticleRepo的實例(希望我做對了)。

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult New (Article article)
{
    try
    {
        if (ModelState.IsValid)
        {
            var userId = User.Identity.GetUserId();

            Article newArticle = new Article
            {
                Title = article.Title,
                Content = article.Content,
                AuthorId = userId,
                CreatedAt = DateTime.Now,
                LastUpdated = DateTime.Now
            };

            _ArticleRepo.InsertArticle(newArticle);
            _ArticleRepo.Save();

            return RedirectToAction("Details", "Article", new { id = article.Id });
        }
    } catch (DataException)
    {
        ModelState.AddModelError(string.Empty, "Unable to save changes. Try again, and if the problem persists contact your system administrator.");
    }

   return View(article);
}

當我點擊_ArticleRepo.InsertArticle(newArticle);時收到錯誤_ArticleRepo.InsertArticle(newArticle);

從控制器中刪除默認構造函數:

public ArticleController(){}

這將概述問題。 您要遵循的示例使用了依賴注入,這是一個很好的學習模式。 不幸的是,默認情況下,MVC期望控制器具有依賴項,盡管它們提供了掛鈎來容納替代的控制器工廠。 大多數IoC容器(控制反轉,與依賴注入一起使用)都支持MVC控制器注入。

看一下Autofac IoC容器,因為它是該模式的一個很好的例子,並且易於配置/使用,並且它具有非常好的文檔。

https://autofaccn.readthedocs.io/en/latest/integration/mvc.html

另外,您可以閱讀Unity,Ninject,Castle Windsor或其他一些書籍,但可以說這4種是在野外最常見的書籍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM