【问题标题】:Get connection string in class library project in a solution在解决方案中获取类库项目中的连接字符串
【发布时间】:2013-09-08 09:04:14
【问题描述】:

在我的 .net 4 解决方案中,我有两个不同的项目——一个 Web 应用程序项目和一个类库项目。

在 web 应用程序项目中,数据库连接字符串在 web.config 文件中。我想从类库项目中访问该连接字符串。可能吗?如果是,怎么做?

如果有更好的方法来获取连接字符串,请告诉我。

【问题讨论】:

    标签: c# asp.net design-patterns connection-string configuration-files


    【解决方案1】:

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

    从类库中读取它并不理想。毕竟,你能说你的类库总是被带有配置文件的东西所消耗吗?如果您与其他开发人员共享,尤其是不同平台的开发人员,当然不会。

    考虑:

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

    例如:

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

    【讨论】:

    • "你能说你的类库总是被带有配置文件的东西所消耗吗?"由于该库是用 C# 编写的,我认为这是一个有效的假设。话虽如此,我同意直接在类库中访问ConfigurationManager 是错误的,因为此功能超出了类库的范围。
    • @EladLachmi “由于库是用 C# 编写的,我认为这是一个有效的假设”。我不同意。仅仅因为该库是用 C# 编写的,并不意味着它将被 .NET 解决方案使用。例如,它可能是迭代到 java 或其他任何东西。你现在确实让我好奇,如果你在调用者没有支持的库中使用配置管理器会发生什么。 TODO 清单有一个! :)
    • @EladLachmi 另一方面,如果你写了这篇文章,并且无意分享它,那么这将是一个更安全的假设。
    • 由于类库只能从消费应用程序获取配置信息,我认为您不能从具有不支持配置文件的消费应用程序的类库访问ConfigurationManager。在幕后,配置管理器创建一个静态类,该类通过Application 对象访问配置文件。在非.net应用程序中,Application对象不存在,因此无法读取配置信息。
    • 又想到了一个想法。访问文件系统中配置文件的权限是通过AppPool的用户,所以如果AppPool不存在,就没有用户可以访问磁盘上的配置文件。
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多