配置阅读,是否应该仅限于客户端代码?

时间:2009-04-03 09:52:58

标签: c# .net configuration

我只是在写一些数据访问代码。我决定通过构造函数注入从配置传递连接字符串的名称,然后存储库读取并用于构造SqlConnectionStringBuilder。

考虑一下我可能不需要SqlConnectionStringBuilder,但这是另一回事。

我应该在这里阅读配置还是仅限于客户端代码?意见?

public class SqlRepository : IRepository
{
    private SqlConnectionStringBuilder _connString;

    public SqlRepository(string connectionStringName)
    {
        var connStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName];

        if (connStringSetting == null)
            throw new ArgumentException("Could not find connection string in configuration.");

        _connString = new SqlConnectionStringBuilder(connStringSetting.ConnectionString);
    }

} 

3 个答案:

答案 0 :(得分:2)

我更愿意传递一个实际的连接字符串(甚至是Dependency Inject it)。这样做有助于维护SoCSRP

答案 1 :(得分:0)

不同的客户可以使用不同的连接字符串吗?如果是这样,我会在客户端中读取配置并将其传递给我。如果所有客户端都需要相同的连接strinn,那么请将该信息保存在数据层中。

答案 2 :(得分:0)

如果您将连接字符串传递给DAL,那么您可以在数据层一侧查找数据库,这是一个图层违规。如果你想让客户端设置要使用的连接字符串,那么DAL之外的任何内容都不应该知道任何与DB相关的知识,然后让它们设置配置,仅此而已。

如果要解耦连接字符串,请使用工厂模式,并让它担心要使用的连接字符串,单一责任主体。您可以使用依赖注入,配置文件等。