首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何包装MembershipUser

如何包装MembershipUser
EN

Stack Overflow用户
提问于 2010-01-21 19:26:58
回答 3查看 250关注 0票数 2

我如何包装MembershipUser,以便下面的调用返回。包装的原因是我希望返回的结果是一个接口,我可以模拟用户。

代码语言:javascript
复制
public IMembershipUser GetUser(string username, bool userIsOnline)        
        {
            var user = Membership.GetUser(username, userIsOnline));

            //Do something 
            return WrappedUser;
        }

谢谢

EN

回答 3

Stack Overflow用户

发布于 2010-01-21 19:43:52

我恐怕你不能这样做,因为..

System.Web.Security.MembershipUser类型不会从任何特殊的基类型继承,而且它也没有声明为partial,所以您无法做到这一点。

但是如果你告诉我们你到底想做什么,我们可以想出替代的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2010-01-21 20:11:13

您可以通过实现自己的SiteMembershipProvider来实现这一点。这是我不久前做的一个实现的示例片段:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
    <membership defaultProvider="SiteMembershipProvider">
        <providers>
            <clear/>
            <add name="SiteMembershipProvider" type="SiteMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" connectionStringName="myConnectionString"/>
        </providers>
    </membership>

这将默认您的整个站点使用名为SiteMembershipProvider的新MembershipProvider

使用a look herehere for an example来实现整个类。

票数 0
EN

Stack Overflow用户

发布于 2010-01-21 20:45:31

您可以创建一个类来实现IMemberShipUser接口,并在内部存储对“真正的”MembershipUser的引用。

然后,包装类上的属性和方法可以简单地委托给真正的引用。

编辑-下面是一个超级简单的例子:

代码语言:javascript
复制
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; }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2108782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档