2010-01-21 41 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; } 
     } 
    } 
}