我有一個靜態連接工廠類,需要從配置中初始化連接參數namespace MyApp.Common.LinqToDB{ public static class MyConnectionFactory { public static string Authority { get; set; } public static string Target { get; set; } public static string ConnectionString { get; set; } public static string ClientId { get; set; } public static string ClientSecret { get; set; } private static ClientCredential ClientCredential = new ClientCredential(ClientId, ClientSecret); public static IDbConnection createConnection() { AuthenticationContext authenticationContext = new AuthenticationContext(Authority); AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(Target, ClientCredential).Result; SqlConnection MyDataConnection = new SqlConnection(ConnectionString); MyDataConnection.AccessToken = authenticationResult.AccessToken; return MyDataConnection; } }}從主要參數中我嘗試初始化這些屬性MyConnectionFactory.Authority = "blahblah";這會在靜態類中引發空值異常。該值未到達班級。System.TypeInitializationException HResult=0x80131534 Message=The type initializer for 'Workspace.Common.LinqToDB.WorkspaceConnectionFactory' threw an exception. Source=Common StackTrace: at Workspace.Common.LinqToDB.WorkspaceConnectionFactory.set_Authority(String value) in ........Inner Exception 1:ArgumentNullException: Value cannot be null.Parameter name: clientId設置靜態類的靜態屬性值是否錯誤?我知道靜態構造函數(),但它不帶參數,我需要設置連接參數。靜態工廠不是連接工廠的正確模式嗎?如果我不使工廠靜態化,我可以使整個事情正常進行,但這似乎不是正確的做法。
1 回答

浮云間
TA貢獻1829條經驗 獲得超4個贊
private static ClientCredential ClientCredential = new ClientCredential(ClientId, ClientSecret);將被編譯為:
private static ClientCredential ClientCredential;
//Static constructor
static MyConnectionFactory()
{
? ClientCredential = new ClientCredential(ClientId, ClientSecret);
}
靜態構造函數用于初始化任何靜態數據,或執行只需執行一次的特定操作。在創建第一個實例或引用任何靜態成員之前會自動調用它。
現在,當您嘗試分配時Authority,必須先調用靜態構造函數。此時,ClientId和ClientSecret仍然為空,這導致了異常。
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消