如何覆盖基类的数据库连接字符串?

时间:2011-08-18 14:01:57

标签: c# dll database-connection override app-config

我有一个基类(使用C#.net编写),它使用数据集从DB中提取数据,连接字符串在App.config文件中。因此在编写基类之后,它已被编译为dll。

要将此基类用于不同的项目,我必须覆盖数据库连接字符串,所以首先可以做,如果可能的话,任何人都可以给我一个例子吗?

2 个答案:

答案 0 :(得分:3)

我建议给你的类一个重载的构造函数,如下所示:

private readonly string connectionString;

public Foo() : this(Settings.Default.DbConnectionString) {
}

public Foo(string connectionString) {
    this.connectionString = connectionString;
}

然后派生类可以将“重写”连接字符串传递给构造函数。

我认为这比使用虚拟属性等多态更清晰 - 特别是因为可能连接字符串在对象的生命周期中不会改变。你并没有真正改变行为(这是多态性的好处) - 你正在改变初始化(这是构造函数参数的优点)。

答案 1 :(得分:0)

使连接字符串成为基类中受保护的虚拟属性

class Base {
    protected virtual string ConnectionString { get { ... } } // Get from config.
}

class Sub {
    protected override string ConnectionString { get { ... } } // return the new value.
}