使用OWIN请求pipe道创buildApplicationUserManager时,使用dependency injection创build自定义UserStore时遇到问题。 背景 我正在尝试将我们的Web应用程序中的用户function从使用SimpleMembership迁移到新的ASP.NET标识。 当启动一个新的MVC 5项目时,单页应用程序的默认实现使用ASP.Identity,使用Entity Framework来实现UserStorefunction。 在我的例子中,我们已经使用NHibernate作为ORM,并且使用ninject来实现工作模式单元,以便每个请求有一个NHibernate会话,并且我想让ASP.Identity和我们现有的框架一起工作。 为此,我创build了一个自定义的UserStore,可以通过注入相关的存储库/ nhibernate会话等来创build。然后可以使用Ninject注入到Controller的构造函数中,而不是使用默认实现的GetOwinContextfunction。 为了做到这一点,我在Startup的ConfigureAuth(IAppBuilder应用程序)方法中注释了以下行,默认情况下它会创buildUserManager类: // app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 相反,我使用在安装Ninject.Web.Common.Webhost nuget包时创build的NinjectWebCommon来创build相关的绑定。 这个实现对一些UserManager操作可以正常工作,但是对于某些操作(如ResetPasswordAsync),由于未调用默认的ApplicationUserManager实现,因此失败,因此UserManager类中的UserTokenProvider从不设置: public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) { var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); // Configure validation logic for usernames manager.UserValidator = new UserValidator<ApplicationUser>(manager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true }; // Configure validation logic for passwords manager.PasswordValidator […]
这是一个Web API 2项目。 当我使用Ninject实现DI时,我收到一条错误消息 尝试创buildtypes为“TokenController”的控制器时发生错误。 确保控制器有一个无参数的公共构造函数。 [assembly: OwinStartup(typeof(Web.Startup))] namespace Web { public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); ConfigureWebApi(app); } } } public class TokenController : ApiController { private IUserService _userService; public TokenController(IUserService userService) { this._userService = userService; } [Route("api/Token")] public HttpResponseMessage PostToken(UserViewModel model) { if (_userService.ValidateUser(model.Account, model.Password)) { ClaimsIdentity identity […]