我如何包装MembershipUser以便下面的调用返回。包装的原因是我希望返回结果是一个可以模拟用户的接口。
public IMembershipUser GetUser(string username, bool userIsOnline)
{
var user = Membership.GetUser(username, userIsOnline));
//Do something
return WrappedUser;
}
由于
答案 0 :(得分:0)
我担心你不能这样做...
System.Web.Security.MembershipUser类型不会从任何特殊基类型继承,也不会被声明为部分,所以你无法做到这一点
但如果您让我们知道您想要做什么,我们可以提出替代解决方案。
答案 1 :(得分: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 here或here for an example来实现整个班级。
答案 2 :(得分: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; }
}
}
}