1

我正在为我的 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 #>()

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

4

1 回答 1

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 */ }
于 2012-08-27T16:53:06.773 回答