我想知道在.net中设置可重用组件/库时最佳做法是什么。我有一个Web服务,它利用一个包含一些数据库连接的库来与数据库交互。我想知道在指定连接字符串时我应该如何设置我的库。
我需要能够改变可重用组件连接到哪个数据库,因为我正在部署到dev / uat / prod环境。还有一些需要能够跟踪谁正在进行数据库调用 - 我可能想看看谁是可重用组件的用户,所以如果webservices A和B都使用它,我可能希望ws_A_usr用于连接字符串,同样适用于B。
我看到了一些可以做到这一点的方法,但我正在重构一些传统,所有三种实现都在使用。
我应该从config读取连接字符串(MyLib.Properties.Settings.Default.abcConnectionString)
我应该在我的api中接受连接字符串作为参数吗?
我应该在我的api中接受IDbConnection作为参数吗?
还有其他更合适的方法吗 - 最好的方法是什么?
答案 0 :(得分:1)
我想说库应该独立于它的用户(在这种情况下是webservice)。在这方面,依赖于配置文件并不是那么好。
您确实需要webservice的web.config中的connectionstring,但是您希望在某个时候通过参数将其传递给库。这将允许您在非Web项目中使用相同的库。此外,它还允许您实现获取连接字符串的不同方法(可能来自Web服务调用)。
HTH。 乔纳森
答案 1 :(得分:0)
在我看来,这取决于连接与组件的紧密绑定程度。如果连接是仅由组件使用的数据库,那么强制组件的用户知道有关这些连接的任何信息是没有意义的。在这种情况下,保持连接字符串在配置文件中有效(app.config或web.config)。实际上,将连接字符串保持在组件内部可能就足够了,但是要在配置文件中公开数据库服务器名称。
如果组件使用与组件用户相同的数据库,则允许将连接作为组件的属性传入。如果未设置属性,组件可以选择是默认为内置连接字符串,还是在未设置属性时抛出异常。
如果您不介意将整个连接字符串暴露给使用者,则允许整个字符串存在于app.config或web.config中。特别是,使用.NET 2.0应用程序设置功能(Properties \ settings.settings)。这将导致默认值被编译到程序集中,但是当使用该组件时,这些默认值将被写入app.config文件。它们可以从那里编辑。
如果要限制可以更改的连接字符串部分,请将这些部分编译到程序集中。公开您允许更改的零件的各个属性。特别是,公开数据库服务器名称,应用程序名称,用户名,密码等。这些属性将设置连接字符串的相应部分。如果您还不知道,请参阅SqlConnectionStringBuilder class。