Настойчивость-невежество ASP.NET идентичность с паттернами и configureoauthtokengeneration
Я давно этим пользуюсь шаблон для реализации ASP.NET Identity 2.2 с чистой архитектурой DDD. Однако; когда я хочу использовать ConfigureOAuthTokenGeneration, он требует, чтобы CreatePerOwinContext знал ваш DbContext и экземпляр UserManager/RoleManager с DbContext . обычно я бы пошел с:
private void ConfigureOAuthTokenGeneration(IAppBuilder app) { app.CreatePerOwinContext(AppDbContext.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); app.CreatePerOwinContext(ApplicationRoleManager.Create); OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = false, TokenEndpointPath = new PathString("/oauth/token"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new CustomOAuthProvider(), AccessTokenFormat = new CustomJwtFormat(ConfigurationManager.AppSettings["ApiPath"]) }; app.UseOAuthAuthorizationServer(OAuthServerOptions); }
Rolemanager сведения о:
public class ApplicationRoleManager : RoleManager { public ApplicationRoleManager(IRoleStore roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions options, IOwinContext context) { var appRoleManager = new ApplicationRoleManager(new RoleStore(context.Get())); return appRoleManager; } }
UserManager:
public class ApplicationUserManager : UserManager { public ApplicationUserManager(IUserStore store) : base(store) { } public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context) { var appDbContext = context.Get(); var appUserManager = new ApplicationUserManager(new UserStore(appDbContext)); return appUserManager; } }
Проблема в том,что когда я хочу передать UserManager и RoleManager в CreatePerOwinContext, для этого требуется метод Create, как описано выше, я не знаю, как реализовать их с помощью RoleStore/UserStore, который я создал, так как их конструктор принимает мой IIdentityContext и в пределах вышеуказанных классов я не могу ввести свой IIdentityContext вот моя реализация RoleStore/UserStore:
Что я уже пробовал:
RoleStore:
public class RoleStore : IRoleStore, IQueryableRoleStore, IDisposable { private readonly IIdentityContext _context; public RoleStore(IIdentityContext context) { _context = context; } }
UserStore:
public class UserStore : IUserLoginStore, IUserClaimStore, IUserRoleStore, IUserPasswordStore, IUserSecurityStampStore, IUserStore, IDisposable { private readonly IIdentityContext _context; public UserStore(IIdentityContext context) { _context = context; } }
И Мой IIdentityContext:
public interface IIdentityContext : IUnitOfWork { IUserRepository Users { get; } IRoleRepository Roles { get; } }