2014-01-09 39 views
0

這剛剛發生在我身上。在我的代碼,我需要在一個指定的用戶分配到RolesSqlRoleProvider.GetRolesForUser混淆:'對象引用未設置爲對象的實例'

這裏是什麼在我的代碼:

string[] roles = {}; 
SqlRoleProvider fxSRP = new SqlRoleProvider(); 

string id = Request.QueryString["UserName"] as string; 

string userName = id; 

現在這一切很好,但是當我到達此位:

roles = fxSRP.GetRolesForUser(userName); 

該系統拋出那個被遺棄的Object reference not set to an instance of an object異常。說實話,我已經讓我堅持了幾分鐘。但是,當我改變的代碼,這個小位(這是一個顯式調用,對吧?):

roles = Roles.GetRolesForUser(userName); 

代碼工作。我可以爲用戶檢索Roles,然後根據需要使用它們。

我想知道,爲什麼使用來自SqlRoleProviderGetRolesForUser不起作用?因爲這可能會發生在我將要使用的下一代代碼中,即使用RemoveUsersFromRolesAddUsersToRoles。此外,該程序正在尋找什麼樣的實例?我沒有實例化該方法的工作?

+0

幾乎所有的'NullReferenceException'都是一樣的。請參閱「[什麼是.NET一個NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」獲得一些提示。 –

回答

1

你打電話new SqlRoleProvider(),但根據該構造的文檔,http://msdn.microsoft.com/en-us/library/system.web.security.sqlroleprovider.sqlroleprovider.aspx

的SqlRoleProvider構造函數由ASP.NET調用以創建作爲配置中指定的該SqlRoleProvider類的實例應用程序。 此構造函數不適用於您的代碼。

(強調我的。)我不是這個班的專家,但我認爲這句話表明你不應該試圖這樣做。

+0

你的引用讓我記起了一些東西。我沒有正確地「配置」並初始化了我的'SqlRoleProvider',所以也許這就是爲什麼'NullReferenceException'不斷彈出 – JamesP

+0

我設置了我的配置選項,並試圖初始化我的'SqlRoleProvider',它現在工作奇蹟:) – JamesP

1

雖然@Chris Culter的建議可能會更好地作爲評論原樣,但如果框架建議不直接實例化對象,那麼很可能不應該這樣做。這樣做可能會跳過實例化對象的幾個重要的初始化步驟,這意味着您可能沒有提供足夠好的預期用途。

你偶然發現了你在做什麼的建議方式,所以爲什麼要打擾不可用的選項(特別是考慮到它明確不推薦)?

如果您以這種方式使用此類特別有用,那麼我建議將相關程序集放入ILSpy或Reflector中,並開始深入瞭解框架如何使用您的特定用例以確保您正在模仿T的行爲。

即使仍然取決於未經推薦的行爲,無論其公開程度如何,都極爲灰心,因爲未來可能會在未通知的情況下進行更改。最好取決於應如何使用而不是利基編譯要求。

相關問題