【发布时间】:2016-02-21 00:17:09
【问题描述】:
我使用 IoC (DI) 方法并且通常有参数,这些参数是由最低层(DB 层等)从配置设置(即连接字符串、静态值等)中读取的。最好的方法是什么?
-
直接在这个最底层读取,即:
string sendGridApiKey = ConfigurationManager.AppSettings["SendGridApiKey"];
它可以工作,但还需要将此密钥添加到单元测试项目的配置文件中。另外,汇编依赖于配置文件
- 在最高层(即 Web 应用程序)读取它并作为所有层的参数抛出?它会起作用,但所有中间层都会获得未使用的参数(因此,它们将取决于未使用的事物)。
当最低层的不同实现可能需要不同的参数时,还有一个问题。 IE。 SendMail1 可以需要 SMTP/登录名/密码,但 SendMail2 可以只需要 ApiKey,但 SendMail1 和 SendMail2 应该实现相同的接口。因此,使用方法 #2 会造成困难
【问题讨论】:
标签: c# .net dependency-injection architecture inversion-of-control