2017-09-12 6 views
-1

誰かが次の呼び出しをしたときにプライベートコンストラクタが実行されることを確実にするにはどうすればよいですか?静的メンバーにアクセスする前にプライベートコンストラクタを確実にロードする方法を教えてください。

var rc = CrmSecureConfiguration.RestCRMClientConfiguration; 

ここ実装です:

public class CrmSecureConfiguration 
{ 
    private CrmSecureConfiguration() 
    { 
     var configurationPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config"); 

     RestCRMClientConfiguration.CRMOrganizationName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMOrganizationName"].Value; 
     RestCRMClientConfiguration.UserName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceUserName"].Value; 
     RestCRMClientConfiguration.Password = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServicePassword"].Value; 
     RestCRMClientConfiguration.Domain = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceDomain"].Value; 
     RestCRMClientConfiguration.CRMWebServiceBaseUrl = $"{configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceBaseUrl"].Value}/{RestCRMClientConfiguration.CRMOrganizationName}/api/data/v8.1/"; 

    } 
    public static RestCRMClientConfiguration RestCRMClientConfiguration { get; private set; } 
} 

何らかの理由で、現在の動作は、プライベートコンストラクタがまったく実行されていないようなものです。

+2

は、なぜあなたは* *呼び出されるコンストラクタを期待しますか?あなたはそれを呼び出す何も表示されていません... –

+0

静的コンストラクタで試すことができます。 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors – sTrenat

+1

私はこの技術的な詳細ではなく、全体的なデザインについて考えることをお勧めします。 – Divisadero

答えて

0

Singletonパターン:次に

public class CrmSecureConfiguration 
{ 
    private static CrmSecureConfigurationinstance; 

    private CrmSecureConfiguration() { 
     var configurationPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config"); 

     RestCRMClientConfiguration.CRMOrganizationName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMOrganizationName"].Value; 
     RestCRMClientConfiguration.UserName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceUserName"].Value; 
     RestCRMClientConfiguration.Password = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServicePassword"].Value; 
     RestCRMClientConfiguration.Domain = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceDomain"].Value; 
     RestCRMClientConfiguration.CRMWebServiceBaseUrl = $"{configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceBaseUrl"].Value}/{RestCRMClientConfiguration.CRMOrganizationName}/api/data/v8.1/"; 
    } 

    public static CrmSecureConfiguration Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new CrmSecureConfiguration(); 
     } 
     return instance; 
     } 
    } 

    public RestCRMClientConfiguration RestCRMClientConfiguration { get; private set; } 
} 

クライアント:まあ

var rc = CrmSecureConfiguration.Instance.RestCRMClientConfiguration; 
4

インスタンスを作成せずに行うことはできません。代わりに静的なコンストラクタが必要なのでしょうか?

static CrmSecureConfiguration() 
{ 
    var configurationPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config"); 

    RestCRMClientConfiguration.CRMOrganizationName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMOrganizationName"].Value; 
    RestCRMClientConfiguration.UserName = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceUserName"].Value; 
    RestCRMClientConfiguration.Password = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServicePassword"].Value; 
    RestCRMClientConfiguration.Domain = configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceDomain"].Value; 
    RestCRMClientConfiguration.CRMWebServiceBaseUrl = $"{configurationPackage.Settings.Sections["CRMWebService"].Parameters["CRMWebServiceBaseUrl"].Value}/{RestCRMClientConfiguration.CRMOrganizationName}/api/data/v8.1/"; 

} 
関連する問題