IoC Windows服务架构

tri*_*ter 7 c# architecture inversion-of-control autofac

我传统上是一个SQL人.我有一堆C#经验,但这些经常都是工具或定制项目.

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

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

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

在我理解了如何做到这一点之后,我需要做类似的事情来观察新的解析作业(db表中的条目)并处理它们,但我假设它将遵循与上面类似的模式.

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

tri*_*ter 1

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