Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从app.config注入connectionstring,而不是从BaseDataProvider类读取它_C#_Asp.net Mvc_Dependency Injection_Connection String_App Config - Fatal编程技术网

C# 从app.config注入connectionstring,而不是从BaseDataProvider类读取它

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类读取连接字符串的方法相比?我更喜欢使用构造函数注入(只要可能)注入所需的任何对象 我看到的一个小优势是类的依赖关系透明 例如,如果您尝试在测试线束中实例化一个类(在进行集成测试时): 在第一种情况下(构造函数注入),您会立即看到它需要一个连接字符串并提供一个连接字符串 在第二种情况下,实例化该类(可能使用默认构造函数),经过一些尝

您认为从Global.asax.cs注入数据库连接字符串有什么好处吗
ASP.NET MVC中的类与从访问app.config文件的BaseDataProvider类读取连接字符串的方法相比?

我更喜欢使用构造函数注入(只要可能)注入所需的任何对象

我看到的一个小优势是类的依赖关系透明

例如,如果您尝试在测试线束中实例化一个类(在进行集成测试时):

  • 在第一种情况下(构造函数注入),您会立即看到它需要一个连接字符串并提供一个连接字符串
  • 在第二种情况下,实例化该类(可能使用默认构造函数),经过一些尝试和错误后,发现它取决于所设置的
    ConnectionString
    属性
更新: 构造函数注入方法的另一个优点是,它将类本身与从app.config获取连接字符串的机制分离

这可能会在未来的场景中启用您现在甚至没有想到的场景

例如,在我目前从事的一个项目中,我有一个具有db访问权限的组件,并且我在多个上下文中重用了它。在其中一些应用程序中,它使用来自配置文件的标准连接字符串,而在另一些应用程序中,我有另一个组件,它根据某些条件决定使用哪个连接字符串


如果使用第二种方法,则需要更改代码以支持此类功能。

我通常采用混合方法,这样我的BaseDataProvider类就有一个空构造函数,默认为配置中存储的任何内容,但是被重写为在需要默认连接以外的连接的情况下接受connString


然后,我的Global.asax类包含必要的逻辑来确定在给定情况下可能需要的连接字符串。例如,假设您的web应用程序部署在世界各地的服务器上,您希望连接到最近的可用db服务器以避免延迟问题。因此,在用户登录时,我会找出我的用户在哪里,然后用适当的连接设置他们

+1我也会选择注入策略。不要隐藏你的依赖关系,否则它们迟早会咬你。如果你在MVC的某些部分(如控制器)中插入连接字符串,你显然违反了单一责任原则。这将导致难以测试、难以维护代码。如果将连接字符串注入控制器,这意味着控制器直接查询数据库,而这不是控制器的工作。它是存储库或工作单元的工作。控制器应该依赖于为它做数据库工作的东西。