Windows服务中的存储库模式和依赖注入

时间:2018-01-19 04:45:49

标签: c# .net dependency-injection windows-services windows-applications

我需要开发一个Windows服务。以前只使用Asp.Net MVC没有完成任何基于Windows的应用程序。

这方面的基本功能包括访问数据库,然后使用DB中的值调用Web服务,然后在DB中更新响应。

目前正计划添加DataAccesslayer,Business&服务层

我所拥有的查询很少,我们可以使用

  1. Entityframework&在Windows应用程序中使用依赖项注入的存储库模式。

  2. 建议使用依赖注入。

  3. 请就此实施的任何推荐方法提出建议

1 个答案:

答案 0 :(得分:0)

您在问题中只列出了模糊的想法,因此答案有些高级。

1)我会密切评估你是否真的需要在ORM之上的存储库模式。为另一个ORM切换EF的几率是多少?如果您认为可以,甚至可能让您的项目完全切换数据库体系结构(SQL到NoSQL?),那么请转到存储库。否则可能没有。

回购可以增加很多工作,但效益不大。您可能会发现,一旦您拥有一个定义良好的代码优先模型,那么DbSet顶部的repo层就会成为EF中非常相似的调用或一系列调用的代理。这是因为EF中的DbSet已经实现了一个存储库模式,这对您的项目来说已经足够了。

如果您的模型定义不明确,那么随着模型的更改,您可能会发现自己需要做很多工作,不仅要更改DbSet模型和使用它的类,还要更新所有存储库代码和使用它的类。

同样,DbContext已经为您实现了工作单元模式。从字面上看,DbContext是一个工作单元,其生命周期管理应该反映出来。

如果您的存储库的主要原因是抽象数据库,那么这就是EF已经为您做的事情。

对于像EF这样的ORM,存储库的价值总是存在争议。您可以通过快速Google找到很多内容,还可以在Stack Overflow上找到更多内容。

2)虽然我完全沉迷于DI,但我只是尝试在需要的地方使用它,因为它再次增加了不必要的额外复杂性。 Web服务调用似乎是一个明显的依赖,可能会受益。在任何地方注入一个存储库我怀疑我只是因为我总是怀疑存储库在EF之上的价值。请记住,DbContext应该小心注入并且不是线程安全的。 This article goes into depth on that.

3)开发Windows服务时,TopShelf是我的理想选择。它使得它们的开发和推出变得更加容易。 There is a Nuget package for it。我从不后悔使用它。