相关疑难解决方法(0)

使用带有ASP.Net标识的Autofac将ApplicationUserManager传递给ApplicationOAuthProvider

我正在使用ASP.Net Identity并希望ApplicationUserManager通过以下文章将服务添加到我的所有自定义控制器:如何将我的Autofac容器插入ASP.NET Identity 2.1

这在我的控制器中完美运行,但是当我尝试通过在我的API上调用localhost:xxxx/token来创建令牌时.下面是调用的方法,但context.OwinContext.GetUserManager返回null.

我曾尝试注入ApplicationUserManagerApplicationOAuthProvider,但未能成功.你能指点我正确的方向吗?

编辑:10/15

好的,所以我已经进一步了,但我仍然卡住了.我能够使用以下内容初始化类:

    var x = new DatabaseContext();
    var store = new UserStore<ApplicationUser>(x);
    var options = new IdentityFactoryOptions<ApplicationUserManager>()
    {
        DataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ApplicationName")
    };

    builder.Register<DatabaseContext>(c => x);
    builder.Register<UserStore<ApplicationUser>>(c => store).AsImplementedInterfaces();
    builder.Register<IdentityFactoryOptions<ApplicationUserManager>>(c => options);
    builder.RegisterType<ApplicationUserManager>();

    builder.Register<ApplicationOAuthProvider>(c => new ApplicationOAuthProvider("self", new ApplicationUserManager(store, options))).As<IOAuthAuthorizationServerProvider>();
Run Code Online (Sandbox Code Playgroud)

这让我可以把它传递给ApplicationUserManagerApplicationOAuthProvider的构造函数.在Startup.Auth配置中,我使用以下内容初始化Provider:

OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = (IOAuthAuthorizationServerProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IOAuthAuthorizationServerProvider)),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = …
Run Code Online (Sandbox Code Playgroud)

dependency-injection inversion-of-control autofac asp.net-web-api asp.net-identity-2

6
推荐指数
1
解决办法
3523
查看次数

RoleStore <IdentityRole>类型不能分配给服务IRoleStore <IRole>

我正在尝试使用MVC5和EF6为项目设置依赖注入Autofac.

我很难弄清楚如何正确地解耦EntityFramework.RoleStore <EntityFramework.IdentityRole>实现.
我想只依赖于Identity.IRoleStore <Identity.IRole>,但我知道对于泛型类,我需要指定具体的实现,而不是接口.

这是我试过的:

        builder.RegisterType<IdentityRole>().As<IRole>();
        builder.RegisterType<RoleManager<IRole>>();
        builder.RegisterType<RoleStore<IdentityRole>>().As<IRoleStore<IRole>>();
        builder.Register(c => new RoleManager<IRole>(c.Resolve<IRoleStore<IRole>>()));
Run Code Online (Sandbox Code Playgroud)

完整的错误消息:

类型'Microsoft.AspNet.Identity.EntityFramework.RoleStore 1[Microsoft.AspNet.Identity.EntityFramework.IdentityRole]' is not assignable to service 'Microsoft.AspNet.Identity.IRoleStore1 [[Microsoft.AspNet.Identity.IRole,Microsoft.AspNet.Identity.Core,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35]]'.

dependency-injection autofac entity-framework-6 asp.net-mvc-5

5
推荐指数
1
解决办法
3772
查看次数