C# 从app.config注入connectionstring,而不是从BaseDataProvider类读取它
您认为从Global.asax.cs注入数据库连接字符串有什么好处吗C# 从app.config注入connectionstring,而不是从BaseDataProvider类读取它,c#,asp.net-mvc,dependency-injection,connection-string,app-config,C#,Asp.net Mvc,Dependency Injection,Connection String,App Config,您认为从Global.asax.cs注入数据库连接字符串有什么好处吗 ASP.NET MVC中的类与从访问app.config文件的BaseDataProvider类读取连接字符串的方法相比?我更喜欢使用构造函数注入(只要可能)注入所需的任何对象 我看到的一个小优势是类的依赖关系透明 例如,如果您尝试在测试线束中实例化一个类(在进行集成测试时): 在第一种情况下(构造函数注入),您会立即看到它需要一个连接字符串并提供一个连接字符串 在第二种情况下,实例化该类(可能使用默认构造函数),经过一些尝
ASP.NET MVC中的类与从访问app.config文件的BaseDataProvider类读取连接字符串的方法相比?我更喜欢使用构造函数注入(只要可能)注入所需的任何对象 我看到的一个小优势是类的依赖关系透明 例如,如果您尝试在测试线束中实例化一个类(在进行集成测试时):
- 在第一种情况下(构造函数注入),您会立即看到它需要一个连接字符串并提供一个连接字符串
- 在第二种情况下,实例化该类(可能使用默认构造函数),经过一些尝试和错误后,发现它取决于所设置的
属性ConnectionString
如果使用第二种方法,则需要更改代码以支持此类功能。我通常采用混合方法,这样我的BaseDataProvider类就有一个空构造函数,默认为配置中存储的任何内容,但是被重写为在需要默认连接以外的连接的情况下接受connString
然后,我的Global.asax类包含必要的逻辑来确定在给定情况下可能需要的连接字符串。例如,假设您的web应用程序部署在世界各地的服务器上,您希望连接到最近的可用db服务器以避免延迟问题。因此,在用户登录时,我会找出我的用户在哪里,然后用适当的连接设置他们+1我也会选择注入策略。不要隐藏你的依赖关系,否则它们迟早会咬你。如果你在MVC的某些部分(如控制器)中插入连接字符串,你显然违反了单一责任原则。这将导致难以测试、难以维护代码。如果将连接字符串注入控制器,这意味着控制器直接查询数据库,而这不是控制器的工作。它是存储库或工作单元的工作。控制器应该依赖于为它做数据库工作的东西。