![](/img/trans.png)
[英]NullReferenceException: Object reference not set to an instance of an object #2
[英]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.