1

Telerik OpenAccess ORM ライブラリのコード生成テンプレートの 1 つをカスタマイズしています。ビジネス ルールにより、データベースに接続するためのユーザー名とパスワードを暗号化された文字列として構成ファイルに入れる必要があります。私にはこの要件に対する権限がないため、回避することはできません

私が行ったことは、復号化された資格情報を提供するシングルトン クラスを作成し、それを使用するようにコード生成テンプレートを変更することです。ここに私が変更しているテンプレートの一部があります:

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 に答える