2

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

+1

如果在注入MVC​​的零件(如控制器)的连接字符串你显然违反了单一职责原则。这将导致难以测试,难以维护代码。如果您要将连接字符串注入Controller,这意味着控制器直接查询数据库,而不是Controller的工作。这是存储库或工作单元的工作。控制器应该依赖于那些为数据库做些什么的东西。 – Steven

回答

3

我宁愿使用构造函数注入(尽可能)注入任何需要的对象。

我看到的一个小优点是关于类的依赖关系的透明度。

例如,如果你试图实例化一个测试工具类(同时做集成测试):在第一种情况下(构造函数注入),您可以立即看到,它需要一个连接字符串,并提供

  • 一个在你实例化类(也许使用一个默认的构造函数)第二种情况
  • 和一些审判后&错误发现,这取决于ConnectionString属性被设置

更新: 构造注射方法的另一个优点是,它解耦类本身获得从app.config中的连接字符串的机制。

这可能会在未来的情景,你甚至不想想现在启用。

例如,在一个项目中,我目前我的工作有一个具有数据库访问组件,我已经在若干情况下重复使用它。在其中一些中,它使用来自配置文件的标准连接字符串,而在另一些中,我有另一个组件根据某些条件决定使用哪个连接字符串。

如果你去的第二个方法,你需要改变,以支持这种功能的代码。

+0

+1我也会采取注射策略。不要隐藏你的依赖,否则他们迟早会咬你的。 –

0

我通常采取一种混合方法,以便我的BaseDataProvider类具有一个空构造函数,该构造函数默认存储在配置中的任何内容,但在需要默认连接以外的情况下被覆盖以接受connString。

然后我的Global.asax类包含必要的逻辑,以确定他们可能需要在特定情况下哪些连接字符串。例如,假设您的Web应用程序已在全球各地的服务器上部署,则您需要连接到最近的可用数据库服务器以避免延迟问题。因此,对用户登录,我就揣摩出我的用户是再设置它们与相应的连接

相关问题