2013-02-12 81 views
2

我正在實現一個自定義ASP.NET角色提供程序,我想知道如果用戶傳入的用戶已經在傳入的角色中,它的AddUsersToRoles方法是否應該拋出ProviderException。默認的Microsoft SQL Server角色提供程序SqlRoleProvider會顯示此行爲,即使official Microsoft documentation不推薦它:我的自定義RoleProvider應該在AddUsersToRoles中引發異常嗎?

異常詳細信息:System.Configuration.Provider.ProviderException:用戶「myTestUser」已經在角色「myTestRole」。

我認爲這對我的提供者不會在這種情況下拋出異常是有用的,但只是在給定用戶已經在給定的角色時繼續前進;這樣的調用代碼不需要擔心重複。但是,在這種情況下是否會存在依賴於異常的現有角色提供程序使用代碼?如果有的話,是否應該這樣做,因爲微軟自己似乎不推薦它?

如果我要實現類似AddUsersToRoles的方法,當用戶已經在一個角色不拋出異常,我可以看到3個備選方案:

  1. 實現它爲AddUsersToRoles,只是有與默認SqlRoleProvider不同的行爲。
  2. 在我的角色提供者類中將其作爲新的EnsureUsersInRoles方法實現,並使用((MyProvider)(Roles.Provider)).EnsureUsersInRoles()從我的調用代碼中訪問它。
  3. 只需在一個完全獨立的類中實現它。

回答

0

我最終走下了路線2),我在我的問題中提出了;我使用其他一些方法實現了RoleProvider,然後使用cast ((MyProvider)(Roles.Provider))訪問我的其他方法,其中一個方法是EnsureUsersInRoles(),它具有我的調用代碼所需的非異常拋出功能。

0

就我個人而言,我會遵循微軟的做法。這將很難排除某些地方確實需要拋出異常的可能性。

+0

那麼如果能夠打電話我可以使用它不會拋出異常? – Jez 2013-02-12 20:53:35

+0

我在想這個。儘管我同意預先檢查你的用戶是否已經在角色中是額外的工作,但我認爲MS中的模式非常清晰:「AddWhatever」如果無法添加,則會引發錯誤。反思我認爲這很好,因爲至少你知道你在哪裏,而不像「沉默失敗」,這可能是因爲該項目已被添加,但可能是因爲某些事情是錯誤的。 (請參閱下一條評論) – 2013-02-12 21:03:20

+0

如果您需要添加某種方法(如果丟失了某些內容但未拋出異常),請考慮調用該方法「EnsureUsersInRoles」。這樣你就可以得到你想要的行爲,但不會引入打破現有模式的方法。 – 2013-02-12 21:04:20

相關問題