具有 MVC 模式依赖关系问题的四层体系结构,导致编译错误

本文关键字:体系结构 四层 错误 编译 依赖 模式 MVC 关系 问题 具有 | 更新日期: 2023-09-27 17:56:54

我有一个网站,它使用四层架构和MVC模式。

在Visual Studio中,我有一个包含4个项目的解决方案:

  • 制药.MVC
  • 制药服务有限公司
  • 制药业务
  • 制药基础设施

以下是每个项目如何引用另一个项目:

  • Pharma.MVC引用了Pharma.Service。
  • Pharma.Service引用了Pharma.Business。
  • Pharma.Business 引用了 Pharma.Infrastructure。

在Pharma.MVC项目中,我有一个这样的控制器:

public class HomeController : Controller
{
    private IHomeService _service;
    public HomeController(IHomeService service)
        : base()
    {
        _service = service;
    }
    public override ActionResult Index()
    {
        HomeIndexViewModel viewModel = new HomeIndexViewModel
        {
            viewModel.NewsArticles = _service.GetLatestNewsArticles()
        };
        return View(viewModel);
    }
}

在同一项目中,HomeIndexViewModel 如下所示:

public class HomeIndexViewModel
{
    public IEnumerable<NewsArticle> NewsArticles { get; set; }
}

在Pharma.Service项目中,我有这样的服务:

public class HomeService : IHomeService
{
    private INewsRepository _newsRepository;
    public HomeService(INewsRepository newsRepository)
    {
        _newsRepository = newsRepository;
    }
    public IEnumerable<NewsArticle> GetLatestNewsArticles()
    {
        return _newsRepository.Find(newsArticle => newsArticle.DatePublished.Date > DateTime.Today).ToList();
    }
}

在Pharma.Business项目中,我有一个这样的模型:

public class NewsArticle
{
    public int NewsArticleId { get; set; }
    public string Title { get; set; }
    public string Strapline { get; set; }
    public string Summary { get; set; }
    public string Story { get; set; }
    public DateTime DatePublished { get; set; }
}

我一直在阅读大量有关四层架构的书籍,这是我用来作为将这个解决方案组合在一起的参考。

但是在Visual Studio中,我在尝试构建时不断收到以下错误:

类型"Pharma.Business.Entities.NewsArticle"在 未引用的程序集。必须添加对程序集的引用 "制药业务"

有人可以就我出错的地方提供一些帮助以摆脱此错误吗?

具有 MVC 模式依赖关系问题的四层体系结构,导致编译错误

如果要

在代码中使用类型(IEnumerable<NewsArticle> NewsArticlesHomeIndexViewModel中),则必须引用该类型(NewsArticle)所在的程序集。

因此,您必须在 Pharma.MVC 中添加对Pharma.Business的引用。

如果您不希望这样做,则必须在两者之间添加另一个图层:从服务图层返回的数据传输对象。然后在服务层中,从业务层映射到这些服务 DTO。