.net 可重用组件、数据库连接和不同的环境

.net 可重用组件、数据库连接和不同的环境,.net,configuration,connection-string,.net,Configuration,Connection String,我想知道在.net中设置可重用组件/库时,什么是最佳实践。我有一个Web服务,它利用一个库,其中包含一些数据库连接,用于与数据库交互。我想知道在指定连接字符串时应该如何设置我的库 在部署到dev/uat/prod环境时,我需要能够更改可重用组件连接到哪个数据库。此外,还需要能够跟踪谁在进行数据库调用——我可能想知道谁是可重用组件的用户,因此,如果Web服务a和B都在使用它,我可能希望ws_a_usr在连接字符串中使用,同样,对于B 我看到了一些可以做到这一点的方法,但当我重构一些遗留问题时,所有

我想知道在.net中设置可重用组件/库时,什么是最佳实践。我有一个Web服务,它利用一个库,其中包含一些数据库连接,用于与数据库交互。我想知道在指定连接字符串时应该如何设置我的库

在部署到dev/uat/prod环境时,我需要能够更改可重用组件连接到哪个数据库。此外,还需要能够跟踪谁在进行数据库调用——我可能想知道谁是可重用组件的用户,因此,如果Web服务a和B都在使用它,我可能希望ws_a_usr在连接字符串中使用,同样,对于B

我看到了一些可以做到这一点的方法,但当我重构一些遗留问题时,所有三种实现都在使用

我应该从配置(MyLib.Properties.Settings.Default.abcConnectionString)中读取ConnectionString吗

我应该接受ConnectionString作为api中的参数吗

我应该接受IDbConnection作为api中的参数吗


还有其他更合适的方法吗?最好的方法是什么?

我想说,库应该独立于它的用户(在本例中是Web服务)。在这方面,依赖配置文件并不是一件好事

您确实希望web服务的web.config中包含connectionstring,但希望在某个时候通过参数将其传递给库。这将允许您在非web项目中使用相同的库。它还允许您实现不同的方式来获取connectionstring(可能是从webservice调用)

嗯。
乔纳森

在我看来,这取决于连接与组件的紧密程度。如果连接到只由组件使用的数据库,那么强制组件用户了解这些连接是没有意义的。在这种情况下,在配置文件(app.config或web.config)中保留连接字符串是有效的。事实上,将连接字符串保留在组件内部可能就足够了,但要在配置文件中公开数据库服务器名称

如果组件使用与组件用户相同的数据库,则允许将连接作为组件的属性传入。如果未设置属性,组件可以选择是默认为内置连接字符串,还是在未设置属性时引发异常


如果您不介意将整个连接字符串公开给使用者,则允许整个字符串存在于app.config或web.config中。特别是,请使用.NET 2.0应用程序设置功能(属性\设置.Settings)。这将导致将默认值编译到程序集中,但当使用组件时,这些默认值将写入app.config文件。可以从那里编辑它们


如果要限制连接字符串中可以更改的部分,请将这些部分编译到部件中。公开允许更改的零件的各个特性。特别是,公开数据库服务器名称、应用程序名称、用户名、密码等。这些属性将设置连接字符串的相应部分。如果您还不知道,请查看连接字符串。

@Jonathan:连接字符串可能在web.config或app.config中:代码不会知道区别。是的,但不是重点。关键是要有一个可重用的库。在这方面,如果您希望能够从(比如用户输入)传递connectionstring,那么如果您有一个参数,您可以这样做。这在dev/uat/prod环境中如何工作。我无法将连接字符串编译到程序集中,因为主机名和用户名/密码因环境而异。我还希望组件的每个使用者都是可跟踪的,这意味着每个使用者都必须有不同的连接字符串?如果配置中缺少设置,我是否应该从组件中抛出ConfigurationErrorsceptions?