2010-01-21 46 views
2

我如何包裝MembershipUser以便下面的調用返回。包裝的原因是我想返回結果是一個接口,我可以嘲笑用戶。如何包裝MembershipUser

public IMembershipUser GetUser(string username, bool userIsOnline)   
     { 
      var user = Membership.GetUser(username, userIsOnline)); 

      //Do something 
      return WrappedUser; 
     } 

感謝

回答

0

恐怕你不能做到這一點監守..

System.Web.Security.MembershipUser類型從任何特殊的基地型不繼承也沒有聲明爲部分,所以你無法做到這一點。

但是,如果您讓我們知道您想要做什麼,我們可以提出備用解決方案。

0

您可以通過實施您自己的SiteMembershipProvider來實現此目的。下面是一個實現我做了一段時間後的一個例子片段:

public class CustomMembershipUser : MembershipUser 
{ 
    public UserItem UserItem { get; private set; } 

    public CustomMembershipUser(string providerName, UserItem user) 
     : base(providerName, user.UserName, "user_" + user.UserID, user.Email, 
      null, null, true, !user.IsCurrent, DateTime.MinValue, 
      DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue) 
    { 
     this.UserItem = user; 
    } 
} 

public class SiteMembershipProvider : MembershipProvider 
{ 
    .... 

    private static MembershipUser GetMembershipUser(UserItem user) 
    { 
     return new CustomMembershipUser(_membershipProviderName,user); 
    } 

    public override MembershipUser GetUser(string username, bool userIsOnline) 
    { 
     // Load user 
     return GetMembershipUser(foundUser); 
    } 

    .... 
} 

在Web.Config中:

<membership defaultProvider="SiteMembershipProvider"> 
     <providers> 
      <clear/> 
      <add name="SiteMembershipProvider" type="SiteMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" connectionStringName="myConnectionString"/> 
     </providers> 
    </membership> 

這應該默認你的整個網站以使用新的MembershipProvider稱爲SiteMembershipProvider

a look herehere for an example來實現整個班級。

0

您可以創建一個實現您的IMemberShipUser接口並在內部存儲對「真實」MembershipUser的引用的類。

包裝類的屬性和方法可以簡單地委託給真實的參考。

編輯 - 下面一個超級簡單的例子:

using System.Web.Security; 
namespace Example 
{ 
    public interface IMembershipUser 
    { 
     string UserName { get; }  
     string Email { get; }  
    } 

    public class WrappedMembershipUser: IMembershipUser 
    { 
     private readonly MembershipUser realUser; 

     public WrappedMembershipUser(MembershipUser realUser) 
     { 
      this.realUser = realUser; 
     } 
     public string UserName 
     { 
      get { return realUser.UserName; } 
     } 
     public string Email 
     { 
      get { return realUser.Email; } 
     } 
    } 
}