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

时间:2015-06-18 16:55:25

标签: c# asp.net-mvc

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

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

  • Pharma.MVC
  • Pharma.Service
  • Pharma.Business
  • Pharma.Infrastructure

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

  • 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”类型定义于   未引用的程序集。您必须添加对程序集的引用   'Pharma.Business'

有人可以提供一些帮助,帮助我解决这个错误。

1 个答案:

答案 0 :(得分:0)

如果您想在代码中使用某个类型(IEnumerable<NewsArticle> NewsArticles中的HomeIndexViewModel),则必须引用类型(NewsArticle)所在的程序集。< / p>

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

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