关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
12 个月前关闭。
Improve this question
我正在做一个快速的项目来监控/处理数据。本质上,这只是监视器、时间表和处理器。监视器使用计划检查数据(ftp、本地、imap、pop 等)并将新数据发送到处理器。它们都有接口(interface)。
我正在尝试找到一种理智的方式来使用 config 来配置每个监视器使用的调度/处理器。这很容易:
<monitor type="any.class.implementing.monitor">
<schedule type="any.class.implementing.schedule">
...
</schedule>
<processor type="any.class.implementing.processor" />
</monitor>
我正在苦苦挣扎的是配置任何旧监视器/时间表/处理器的最佳方法是什么。一方面,可以实现构造函数参数或属性(不采用任何语法):
<monitor type="any.class.implementing.monitor">
<args>
<arg value="..." />
</args>
<properties>
<property name="..." value=..." />
</properties>
<schedule type="any.class.implementing.schedule">
...
</schedule>
<processor type="any.class.implementing.processor" />
</monitor>
另一种解决方案是每个接口(interface)中的工厂方法,它将自定义配置作为参数:
public IMonitor Create(CustomConfigSection config);
我见过有人同时使用这两种方法。你喜欢哪个?将配置映射到构造函数时有什么技巧吗?
我对 DI 是否能融入这个烂摊子感到有些不安。最后,这将是每个监视器实例的一组绑定(bind),除了配置可以覆盖的默认值之外,这似乎毫无意义。
最佳答案
当我完成这种事情时,我已经实现了 IConfigurationSectionHandler
它基本上作为一个工厂来解析配置,创建配置中指定类型的对象,并以某种数据结构(通常是列表或字典)返回它们。无论您使用 IConfigurationSectionHandler
与否,我认为工厂是要走的路,因为您将本地化处理解析配置文件并在一个类(或每个部分一个)中创建对象的代码。
我也更喜欢具有简单构造函数的类和用于配置的属性 setter / getter ,而不是构造函数中具有大量参数的类。这使得工厂更容易操作,并减少了工厂与正在构建的类之间的耦合。
关于.net - .config 到构造函数的技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264243/