在解决方案中的类库项目中获取连接字符串

7
在我的.NET 4解决方案中,我有两个不同的项目 - 一个Web应用程序项目和一个类库项目。
在Web应用程序项目中,数据库连接字符串在web.config文件中。我想从类库项目中访问该连接字符串。这是否可能?如果是,如何实现?
如果有更好的方法来获取连接字符串,请告诉我。
1个回答

7

要从您的类库访问它,请添加对 System.Configuration 的引用,然后使用 System.Configuration.ConfigurationManager.ConnectionStrings

从类库中读取这些内容并不理想。毕竟,您能否保证您的类库总是被具有配置文件的东西所使用?特别是如果您与其他平台的开发人员共享,则肯定不行。

考虑以下几点:

  1. IoC - 使用依赖注入提供包含配置设置的依赖项。这些将由消费库(Web 应用程序)填充。
  2. 在使用依赖于这些设置的元素时,将这些设置传递给类库。

例如:

public class MyLibraryContainer
{
    private string _connectionString;

    public MyLibraryContainer(string connectionString)
    {
        _connectionString = connectionString;
    }
}

“你能说你的类库总是会被一个配置文件所使用吗?”由于该库是用C#编写的,我认为这是一个有效的假设。话虽如此,我同意直接在类库中访问ConfigurationManager是错误的,因为这个功能超出了库的范围。 - Elad Lachmi
1
“由于该库是用C#编写的,我认为这是一个有效的假设。” 我不同意。仅仅因为该库是用C#编写的,并不意味着它将被.NET解决方案所使用。例如,它可以被Interop到Java或其他任何东西中。现在你让我很好奇,如果你在没有支持的调用者的库中使用配置管理器会发生什么。这是待办事项清单上的一件事! :) - Paul Fleming
另一方面,如果您编写了此代码,并且没有分享的意图,那么这将是一个更安全的假设。 - Paul Fleming
1
由于类库只能从使用应用程序中获取配置信息,因此我认为您无法从不支持配置文件的使用应用程序中访问ConfigurationManager。在幕后,配置管理器创建一个静态类,通过Application对象访问配置文件。在非.NET应用程序中,Application对象不存在,因此无法读取配置信息。 - Elad Lachmi
1
又想到了一件事。访问文件系统中配置文件的权限是通过AppPool用户进行的,因此如果没有AppPool存在,则没有用户可以访问磁盘上的配置文件。 - Elad Lachmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接