我传统上是一个 SQL 人。我有很多 C# 经验,但这些都倾向于工具或定制项目。
我现在的任务是编写一个执行以下操作的应用程序......
- 作为 Windows 服务运行
- 监视文件,当它们到达时,将它们加载到数据库
- 监视数据库中新加载的文件
- 对这些文件执行一些复杂的解析(涉及聚合数据库记录)
- 需要额外的接口(用于查询解析数据等的网站)
- 必须支持多种文件类型,必须支持多种解析器。
所以,这是我第一次涉足 IoC,我正在尽我所能正确地做事。我正在使用 Autofac 并且对这些概念非常满意。我的问题是理解组合根,当可以通过容器时,我应该用什么来代替我传统的“工厂”概念。我的应用程序由 L2S 模型和通用存储库接口构成。我使用 Autofac 模块来注册具体类型。我有一个记录器并使用一个模块来注册具体类型。在我的测试控制台应用程序(将被 Windows 服务主机替换)中,我创建了一个容器并注册了记录器和 dal 模块等。然后我可以使用构造函数注入来解析我的文件监视类以注入记录器和存储库。我还注入了一个队列对象(在我的例子中是一个内存支持的队列,但可能是一个数据库队列),新文件排队(生产者)。在队列的另一端,我需要一个消费者。因此,根据出列文件的类型,我需要使用不同的加载器类。我会在历史上使用工厂模式来返回适当的具体类。由于加载器类需要有一个记录器和适当的存储库注入其中,我看不到如何创建适当的加载器类的实例来处理从队列中出来的项目,而不给我的工厂类提供对 IoC 容器的引用。我知道我可以将各种项目处理程序注入到我的消费者类中,但是说我有 50 种文件类型,或者说 100 种,这是不切实际的。我需要使用不同的加载器类。我会在历史上使用工厂模式来返回适当的具体类。由于加载器类需要有一个记录器和适当的存储库注入其中,我看不到如何创建适当的加载器类的实例来处理从队列中出来的项目,而不给我的工厂类提供对 IoC 容器的引用。我知道我可以将各种项目处理程序注入到我的消费者类中,但是说我有 50 种文件类型,或者说 100 种,这是不切实际的。我需要使用不同的加载器类。我会在历史上使用工厂模式来返回适当的具体类。由于加载器类需要有一个记录器和适当的存储库注入其中,我看不到如何创建适当的加载器类的实例来处理从队列中出来的项目,而不给我的工厂类提供对 IoC 容器的引用。我知道我可以将各种项目处理程序注入到我的消费者类中,但是说我有 50 种文件类型,或者说 100 种,这是不切实际的。如果不给我的工厂类提供对 IoC 容器的引用,我看不到如何创建适当的加载器类的实例来处理从队列中出来的项目。我知道我可以将各种项目处理程序注入到我的消费者类中,但是说我有 50 种文件类型,或者说 100 种,这是不切实际的。如果不给我的工厂类提供对 IoC 容器的引用,我看不到如何创建适当的加载器类的实例来处理从队列中出来的项目。我知道我可以将各种项目处理程序注入到我的消费者类中,但是说我有 50 种文件类型,或者说 100 种,这是不切实际的。
在我了解如何执行此操作后,我需要执行类似的操作来监视新的解析作业(数据库表中的条目)并处理这些作业,但我假设它会遵循与上述类似的模式。
大家有什么建议吗?我距离合并我的 C# 和去 SSIS 进行文件加载,然后在 SSIS 中破解一些讨厌的解析器代码还有这么远(小距离)。请帮助 C# 学习者。