找不到“IdentityContext”(您是否缺少using指令或程序集引用)

时间:2016-08-12 09:17:40

标签: c# mongodb asp.net-web-api2 mongodb-.net-driver

我正在将项目https://github.com/attilah/AngularJSAuthentication迁移到使用mongodb驱动程序第2章,我在这里的最后一步:

namespace AngularJSAuthentication.API
{
    using AspNet.Identity.MongoDB;
    using Entities;
    using MongoDB.Driver;

    public class ApplicationIdentityContext : IdentityContext
    {
        public ApplicationIdentityContext(IMongoContext mongoContext)
            : this(mongoContext.Users, mongoContext.Roles)
        {
        }

        public ApplicationIdentityContext(IMongoCollection<User> users, IMongoCollection<Role> roles)
            : base(users, roles)

        {
        }
    }
}

然后我收到此错误

Severity Code Description Project File Line Suppression State Error CS0246 The type or namespace name 'IdentityContext' could not be found (are you missing a using directive or an assembly reference?) AngularJSAuthentication.API D:\Projects\AngularJSAuthentication-master\AngularJSAuthentication.API\ApplicationIdentityContext.cs

这是我目前的源代码

https://github.com/skanel/Angular2-WebApi2-Mongodb2-Authentication

已更新

@Swagata Prateek,感谢您的代码,但是当我运行它时,我停止工作,直接指向startup.cs中的这段代码

private void ConfigureOAuth(IAppBuilder app, IContainer container)
        {
            var OAuthServerOptions = new OAuthAuthorizationServerOptions
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
                Provider = container.Resolve<IOAuthAuthorizationServerProvider>(),
                RefreshTokenProvider = container.Resolve<IAuthenticationTokenProvider>()
            };

错误

  

“Autofac.Core.DependencyResolutionException”类型的例外   发生在Autofac.dll但未在用户代码中处理

     

其他信息:激活a期间发生错误   特别注册。有关详细信息,请参阅内部异常   注册:Activator = SimpleAuthorizationServerProvider   (ReflectionActivator),服务=   [Microsoft.Owin.Security.OAuth.IOAuthAuthorizationServerProvider]   Lifetime = Autofac.Core.Lifetime.RootScopeLifetime,Sharing = Shared,   所有权= OwnedByLifetimeScope

2 个答案:

答案 0 :(得分:1)

我个人使用与Mongodb相同的Asp.net Identity实现示例,以及您错过该类的原因是因为示例很旧并且依赖于mongodb的Identity扩展名为{ {3}}它已经发展到更新版本。

我无法在此处详细说明我如何使用它,但我确实可以指向我的开源项目here,我已经从您提到的示例中学到了这一点。我希望它可以解决你使用Mongodb实现Asp.net身份的问题。

更新

  1. 如果你想拥有Attila Hajdrik在git repo中写的完全相同的解决方案,请确保你拥有完全相同的包版本AspNet.Identity.MongoDB定义here。因为库本身现在已经升级了,我认为你要么更新所有的nuget包,要么根据你的需要重新创建github repo中写的整个解决方案。在这两种情况下,您可能最终得到一个您不想使用的AspNet.Identity.MongoDB版本。这个应该是您需要的最短和最简单的解决方案。

  2. 现在从我的github repo上面提到我的解决方案。我使用了自己的IAccountContext,并使用UserManager<User>作为我的基础AccountManager,使用UserStore<User>作为管理员的基础商店。这里User类是Im使用的Identity类,它派生自IdentityUser

  3. 从技术上讲,您可以轻松地构建自己的上下文,而不是     真的要完全依赖给定的例子。

    我的示例AccountContext将是:

    public class AccountContext : IAccountContext
    {        
        private readonly IDbContext dbContext;
        private readonly AccountManager accountManager;
    
        public AccountContext(
            IDbContext dbContext,         
            AccountManager accoutnManager)
        {
            this.dbContext = dbContext;
            this.accountManager = accoutnManager;        
        }
    // Your own stuff here
    }
    

    此处,AccountManager是一个UserManager<T>衍生产品,它的构造函数需要IUserStore<User>。它实际上为您提供了如何设计Identity层的更多自由。 :)

    希望这会有所帮助。

答案 1 :(得分:0)

很多这个软件包版本都很旧,可能是兼容性问题。如果没有任何内容阻止您更新,请将软件包更新到最新版本。

当您进行更新时,只是在AspNet.Identity.MongoDb包/库中不再存在IdentityContext的FYI。请参阅Github中的源代码:https://github.com/g0t4/aspnet-identity-mongo