我有一个自定义成员资格提供程序,如下所示:
public class PMembershipProvider : MembershipProvider
{
public IMembershipService Account { get; set; }
public PMembershipProvider()
{
this.Account = new UserModel();
}
public override bool ValidateUser(string username, string password)
{
return Account.Login(username, password);
}
public void DisposeContext()
{
Account.Dispose();
}
}
会员服务界面如下所示:
public interface IMembershipService
{
bool Login(string userName, string password);
void Dispose();
}
因此,当我登录用户时,我可以调用我的用户模型的登录方法,如下所示:
public class UserController : Controller
{
public ActionResult Login(UserModel model)
{
if (Membership.ValidateUser(model.name, model.password)) {
FormsAuthentication.SetAuthCookie(model.name, false, MvcApplication.BASE_URL);
return RedirectToAction("Index", "Home");
}
}
我遇到了一些奇怪的用户问题,我认为这些问题与一个不受欢迎的EF对象上下文有关。基于this answer我想尝试手动处理成员资格提供程序使用的对象上下文。我希望在请求结束时发生这种情况,为此我想覆盖用户控制器上的Dispose
方法:
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
Membership.DisposeContext(); //this is what I want to do, but it doesn't work
}
当我尝试调用自定义成员资格提供程序的DisposeContext
方法时,它无法找到该方法。 (' System.Web.Security.Membership'不包含' DisposeContext'的定义)
如何在会员使用的同一个对象上调用我的DisposeContext
方法?
答案 0 :(得分:2)
Membership
class仅提供静态方法来调用默认成员资格提供程序上的已知方法。要调用自定义方法,您需要访问Membership.Provider
property,将其强制转换为自定义提供程序,然后调用方法:
((PMembershipProvider)Membership.Provider).DisposeContext();