在当前构造函数的主体之后调用基础构造函数

时间:2012-08-27 16:45:14

标签: c# .net oop visual-studio-2012 telerik-open-access

我正在为我的Telerik OpenAccess ORM库定制一个代码生成模板。由于业务规则,我不得不将我的用户名和密码作为加密字符串连接到配置文件中的数据库。我对此要求没有权限,因此我无法避免

我所做的是创建一个单例类,它提供解密的凭据并修改代码生成模板以使用它。这是我正在修改的模板的一部分:

public <#= contextClass.Name #>()
        :base(connectionStringName, backend, metadataSource)
{
    Credentials credentials = Credentials.Instance;
    string connectionString = String.Format("DATA SOURCE={0};PASSWORD={1};PERSIST SECURITY INFO=True;USER ID={2}", 
                                             credentials.DatabaseServer,
                                             credentials.DatabasePassword,
                                             credentials.DatabaseUser);

}

public <#= contextClass.Name #>(string connection)
    :base(connection, backend, metadataSource)
{ }

public <#= contextClass.Name #>(BackendConfiguration backendConfiguration)
    :base(connectionStringName, backendConfiguration, metadataSource)
{ }

//More constructors.....

所有模板都生成构造函数,而正文中没有代码。我想要的是创建我的连接字符串,然后将其用于基类的构造函数(OpenAccessContext)。我希望这是我的默认构造函数,你可以通过我修改的无参数构造函数告诉它 - public <#= contextClass.Name #>()

让我难过的是如何创建这个字符串然后在我的基类的构造函数中使用它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你不能在构造函数的末尾调用base(...),但是你应该可以这样做:(注意方法必须是static

static string GetConnString() { /* insert credentials and conn string code here */ }

public <#= contextClass.Name #>()
    :base(GetConnString(), ...

或者如果我误解了你的问题,也许这就是你需要的东西?

public <#= contextClass.Name #>(string connection)
  :this()
{ /* handle connection */ }

public <#= contextClass.Name #>(BackendConfiguration backendConfiguration)
  :this()
{ /* handle backendConfiguration */ }