跨库的ApplicationSettings

时间:2008-12-09 14:59:45

标签: .net application-settings

我正在尝试将所有数据库代码抽象到一个单独的库中,然后在我的所有代码中使用该库。所有数据库连接都是使用我在VS2005中使用appSettings中的连接字符串拖放数据集中创建的类型化TableAdapter完成的。

我无法解决的问题是.Net不会将库appSettings传播到正在使用它的其他项目。

简而言之,我有一个数据库层库MyProgram.DbLayer,它被其他项目使用,例如MyProgram.Client等。当我拥有.Client中的所有数据集时,connectionString位于MyProgram.Client.exe中。配置,以便我可以在构建后更改它。当我将它移动到MyProgram.DbLayer中时,在我构建二进制文件后,我无法使用该设置。

编辑: 这似乎是ApplicationSettings的一个更普遍的问题。

我注意到的是,如果我手动添加仅在库中使用的设置,它将被正确读取。我现在唯一需要的是将设置自动包含在.config文件中。

2 个答案:

答案 0 :(得分:1)

将始终从当前正在运行的应用程序池中读取AppSettings / ConnectionStrings。

我的意思是:

如果我A.exe有一个班级DAL.cs。 DAL.cs从config读取连接字符串,并按预期返回"abc"

然后我将DAL.cs移动到它自己的项目,因此,它自己的程序集。我仍然可以从app.config调用连接字符串,但是,我需要在正在运行的应用程序中“托管”程序集,并将连接字符串添加到该应用程序app config 。因此,我创建了一个新的app.config并在其中指定了连接字符串"xyz",当它运行时,它会按预期运行。

现在,如果我更改A.exe项目中的引用以使用新的DAL.dll,您认为它将具有哪些连接字符串? "xyz"?不!它将像以前一样使用"abc",因为它仍然在A.exe的应用程序配置文件中配置。

我知道这很有效,因为我在许多Windows Web应用程序中使用了共享DAL代码。

如果其中任何一项不清楚,或者对您的问题没有帮助,请通过评论此答案告诉我。

更新以下来自OP的评论

“host”是指一个调用公共代码的应用程序。这可以是Windows或Web应用程序,基本上它是应用程序上下文。

您需要在配置文件中为使用公共代码的每个应用程序创建条目。如果我误解了你原来的问题(完全有可能,这是漫长的一天!)并且你希望集中配置,那么你需要:

  • 创建某种形式的集中存储(无论是XML,DB还是其他)。
  • 增强您的公共代码,使其具有默认值,以使其能够连接到集中存储。
  • 然后,代码可以根据配置存储中的信息自行配置。

希望这会有所帮助:)

答案 1 :(得分:1)

如果我理解你的问题,听起来你需要

1。)所有数据访问调用的通用应用程序上下文

2.。)访问配置设置的另一种方式

1:将数据层包装在单个上下文(IIS,Windows服务等)下运行的服务中

2:不要使用您提供的配置管理机制。而是在特定位置使用属性文件。

不要忘记,配置设置从不同级别级联。例如......如果你在machine.config中添加一个设置,那么在该机器上运行的每个应用程序都将使用该设置,除非它在较低级别被替换...这可能是在你的设置中设置标准化设置的好方法配置文件。