Asp.net mvc 在自定义角色提供程序中注入存储库会使我在Dispose错误后访问DataContext

Asp.net mvc 在自定义角色提供程序中注入存储库会使我在Dispose错误后访问DataContext,asp.net-mvc,linq-to-sql,asp.net-mvc-2,Asp.net Mvc,Linq To Sql,Asp.net Mvc 2,我目前正在构建一个ASP.NET MVC应用程序,我想利用角色的authorize属性,而不必使用默认提供程序及其自动生成的所有表 我决定构建自己的自定义角色提供程序(我的类继承自RoleProvider)并只实现一个方法: public override string[] GetRolesForUser(string username) { Account account = accountRepository.FindByUserName(username); string

我目前正在构建一个ASP.NET MVC应用程序,我想利用角色的authorize属性,而不必使用默认提供程序及其自动生成的所有表

我决定构建自己的自定义角色提供程序(我的类继承自RoleProvider)并只实现一个方法:

public override string[] GetRolesForUser(string username)
{
    Account account = accountRepository.FindByUserName(username);

    string[] role = new string[] { account.Role };

    return role;
}
我的控制器看起来像:

[Authorize(Roles = "Administrator")]
public ActionResult Index()
{
    return View();
}
我使用Unity将存储库注入到我的自定义角色提供程序类中,该类工作正常,但是当调用FindByUserName(用户名)时,我得到的错误是:

无法访问已释放的对象。对象名称:“在Dispose之后访问的DataContext.”

出于某种原因,Linq2Sql不喜欢正在发生的事情,我在这里有点不知所措。任何见解都会非常有用。另外,如果有人在不使用任何角色提供程序的情况下成功完成了我正在尝试的任务,请让我知道。我的数据库中的account表有一个名为role(int)的列,我的代码有一个带有我的角色的枚举


谢谢

好的,那么您注入了存储库。它从哪里获取数据上下文?您是否对每个请求使用DataContext?如果不是的话,你应该考虑一下。是的,这是每个请求。我使用构造函数为多个控制器注入了相同的存储库,没有任何问题。