我如何包装MembershipUser,以便下面的调用返回。包装的原因是我希望返回的结果是一个接口,我可以模拟用户。
public IMembershipUser GetUser(string username, bool userIsOnline)
{
var user = Membership.GetUser(username, userIsOnline));
//Do something
return WrappedUser;
}谢谢
发布于 2010-01-21 19:43:52
我恐怕你不能这样做,因为..
System.Web.Security.MembershipUser类型不会从任何特殊的基类型继承,而且它也没有声明为partial,所以您无法做到这一点。
但是如果你告诉我们你到底想做什么,我们可以想出替代的解决方案。
发布于 2010-01-21 20:11:13
您可以通过实现自己的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>这将默认您的整个站点使用名为SiteMembershipProvider的新MembershipProvider。
使用a look here或here for an example来实现整个类。
发布于 2010-01-21 20:45:31
您可以创建一个类来实现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; }
}
}
}https://stackoverflow.com/questions/2108782
复制相似问题