2013-01-14 39 views
0

我創建了一個倉儲類是這樣的:使用Membership類

public class ProfileRepository : IProfileRepository 
    { 

     private Guid _userIdentifier = (Guid)Membership.GetUser().ProviderUserKey; 
     .... 
    } 

每當我不是在我的網站登錄,我嘗試導航到一個[Authorize]過濾頁面,它會拋出一個錯誤( Object reference not set to an instance of an object.)在private Guid _userIdentifier = (Guid)Membership.GetUser().ProviderUserKey;

過濾器屬性不會捕獲用戶未通過身份驗證的事實。在儲存庫類中能夠獲得當前登錄用戶的ProviderUserKey的最佳方法是什麼,以便它可以在整個儲存庫類中使用?

+0

沒有答案,但我不確定你的存儲庫應該依賴於Membership類。爲什麼不把用戶ID傳遞給適當的方法呢? –

+0

@DStanley只是覺得像傳遞UserId到一堆方法可能是多餘的,似乎更清潔,它在存儲庫中,但如果它的缺陷,那麼我想生病必須改變我的方法。 – anthonypliu

+0

當用戶未登錄時,查詢的結果應該是什麼? – lboshuizen

回答

-1

控制倒置請。

存儲庫的職責不是尋找用戶標識符。無論如何,您實際上是在聲明空間中爲私有成員分配一個值。我知道C#可以讓你這樣做,但是請檢查這些代碼在封面下的編譯方式,並養成用這種方式編碼的習慣。最後,聲明應該是聲明。

我需要看到您的呼叫代碼,以幫助您進一步。此外,你不提什麼是你的會員供應商的類型。

+0

-1 a)您沒有真正提供替代解決方案。 b)會員提供者類型無關緊要。 – jgauffin

+0

A)替代解決方案不是在變量初始化中分配值,而是實際查看他的編譯代碼以瞭解他的錯誤... b)是,類型很重要。你知道GetUser()是抽象的嗎? –

相關問題