我正在使用ASP.Net Identity并希望ApplicationUserManager通过以下文章将服务添加到我的所有自定义控制器:如何将我的Autofac容器插入ASP.NET Identity 2.1
这在我的控制器中完美运行,但是当我尝试通过在我的API上调用localhost:xxxx/token来创建令牌时.下面是调用的方法,但context.OwinContext.GetUserManager返回null.
我曾尝试注入ApplicationUserManager到ApplicationOAuthProvider,但未能成功.你能指点我正确的方向吗?
编辑: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)
这让我可以把它传递给ApplicationUserManager我ApplicationOAuthProvider的构造函数.在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
我正在尝试使用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
autofac ×2