c# - IoC Windows 服务架构

标签 c# architecture inversion-of-control autofac

我传统上是一个 SQL 人。我有很多 C# 经验,但这些都倾向于工具或定制项目。

我现在的任务是编写一个执行以下操作的应用程序......

  • 作为 Windows 服务运行
  • 监视文件,当它们到达时,将它们加载到数据库
  • 监控数据库中新加载的文件
  • 对这些文件执行一些复杂的解析(涉及聚合数据库记录)
  • 需要额外的接口(interface)(用于查询解析数据的网站等)
  • 必须支持多种文件类型,必须支持多种解析器。

所以,这是我第一次涉足 IoC,我正在尽我最大的努力把事情做好。我正在使用 Autofac 并且对这些概念非常满意。我的问题是理解码合根,当可以传递容器时,我应该用什么来代替传统的“工厂”概念。 我的应用程序采用 L2S 模型和基于该模型的通用存储库接口(interface)构建。我使用 Autofac 模块来注册具体类型。我有一个记录器并使用一个模块来注册具体类型。在我的测试控制台应用程序(将由 Windows 服务主机取代)中,我创建了一个容器并注册了记录器和 dal 模块等。然后我可以使用构造函数注入(inject)解析我的文件监视类以注入(inject)记录器和存储库。我还注入(inject)了一个队列对象(在我的例子中是一个内存支持的队列,但可以是一个数据库队列),新文件排队(生产者)。在队列的另一端,我需要一个消费者。因此,根据出队文件的类型,我需要使用不同的加载器类。过去我会使用工厂模式来返回适当的具体类。由于加载器类需要有一个记录器和适当的存储库注入(inject)其中,我无法看到如何创建适当的加载器类的实例来处理从队列中出来的项目,而不给我的工厂类提供对 IoC 容器的引用。我知道我可以将各种项目处理程序注入(inject)我的消费者类,但假设我有 50 种文件类型,或 100 种,这是不切实际的。

在我了解如何执行此操作后,我需要做一些类似的事情来监视新的解析作业(数据库表中的条目)并处理它们,但我假设它会遵循与上述类似的模式。

有什么建议吗?我离装箱我的 C# 和去 SSIS 加载文件,然后在 SSIS 中破解一些讨厌的解析器代码很远(很小的距离)。请帮助 C# 学习者。

最佳答案

我意识到我可以新建一堆加载器类并将它们放入字典中并将其传递给构造函数。这使我可以按名称请求加载程序。

关于c# - IoC Windows 服务架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699441/

相关文章:

database - 使用回调应用程序将 "go deep"设置为不好的做法吗?

inversion-of-control - 温莎容器 : How to specify a public property should not be filled by the container?

c# - IoC 和 "hiding implementation details"

c# - Repository/UnitOfWork Add throws Cannot insert the value NULL into column 错误

c# - 如何一点一点地建立一个 Linq to Sql where 子句?

architecture - 使用哪个 UML 图来表示应用程序架构?

architecture - 什么是传递引用?

dependency-injection - 用户输入依赖注入(inject)的最佳策略是什么?

c# - 接口(interface)和抽象类中的 Xml 属性

c# - ef core - 如何将类映射的多个变体映射到同一个表