无法访问已处置的对象对象名称:'UserManager`1'

时间:2014-08-01 01:57:43

标签: c# asp.net-mvc unity-container

我意识到这个问题在堆栈溢出问了很多次但是我尝试了几个答案但是没有解决我的问题。我刚刚在我的项目中添加了统一,除了userManager类之外一切正常。如果我尝试在会话中访问它,它会抛出一个无法访问错误,如我的标题所述。

   The Code that is throwing the issues and the Container below

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;

        // Start of new code
        UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
        {
            AllowOnlyAlphanumericUserNames = false,
        };
    }



        container.RegisterType<AdminController>();
        container.RegisterType<AccountController>();
        container.RegisterType<IBlogPostRepository, BlogPostRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<IBlogViewRepository, BlogViewRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<ITagRepository, TagRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<ICategoryRepository, CategoryRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<IBlogCategoryRepository, BlogCategoryRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<IBlogTagRepository, BlogTagRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<IApplicationUserRepository, ApplicationUserRepository>(new HierarchicalLifetimeManager());
        container.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
        container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new InjectionConstructor(new CatchMediaContext()));
        container.RegisterType<DbContext, CatchMediaContext>(new HierarchicalLifetimeManager());

2 个答案:

答案 0 :(得分:1)

如果另一个对象具有对userManager的引用并且该对象被释放,则它可能正在处理userManager。另一种可能性是userManager需要某种类型的初始化尚未完成,并且其属性会产生误导性的处置异常(这在winform控件中很常见)。

答案 1 :(得分:0)

我遇到了同样的错误。 我的发现:父部分尝试渲染两种形式。通过在不同的控制器中调用它们各自的动作来创建这两种形式。但是不同的控制器BOTH引用了UserManager<ApplicationUser> userManager。 我的解决方案:只需删除一个表单,因此页面只有一个引用UserManager