我有一个我正在使用的网站,它使用四层架构和MVC模式。
在Visual Studio中,我有一个包含4个项目的解决方案:
以下是每个项目如何引用另一个:
在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'
有人可以提供一些帮助,帮助我解决这个错误。
答案 0 :(得分:0)
如果您想在代码中使用某个类型(IEnumerable<NewsArticle> NewsArticles
中的HomeIndexViewModel
),则必须引用类型(NewsArticle
)所在的程序集。< / p>
因此,您必须在Pharma.Business
中添加对Pharma.MVC
的引用。
如果您不想这样做,则必须在其间添加另一个图层:从服务图层返回的数据传输对象。然后,在服务层中,您可以从业务层映射到这些服务DTO。