【发布时间】:2018-01-07 16:41:51
【问题描述】:
我正在构建一个通用的中间件软件(Windows 服务),它将执行许多jobs.. 例如:
- 同步库存
- 进口订单
- 等
我将 C# 与 Windows 服务一起使用,并使用 Quartz.NET 来安排作业运行。 我也在使用 AutoFac。
据我了解,AutoFac 依赖项应该构建在组合根目录中。这很好..但是,我有某些注入的服务需要运行时参数(来自数据库的配置值)。
例如:
- 某些作业将连接到 SFTP 服务器,连接详细信息将作为键值对存储在数据库中
- 一些作业将连接到远程 API,从而将这些 API 身份验证详细信息与作业存储在数据库中。
我对此进行了一些研究,一些替代方案基本上建议删除其中一些服务的构造函数(例如 SFTP 客户端)并将它们作为配置方法传递..
而不是客户端有一个构造函数,如
SftpClient(string host, string username, string password, int timeoutInSeconds)
它将有一个默认构造函数,以及一个您将它们传入的配置方法。
我一点也不喜欢这个——它违背了我所学到的,你应该尝试配置你的对象,使它通过构造函数处于一致的状态。
什么是最好的选择?
我的JobFactory 方法目前依赖于IComponentContext。
我已经看到有一些方法可以将参数传递给 AutoFac 以构造对象,但我读过的东西表明它并不理想。
使用我的工厂会更好吗
【问题讨论】: