asp.net – 如何将我的Autofac容器插入ASP NET身份2.1
我一直在研究新版本的ASP.NET Identity 2.1的新功能,其增强之一是集成到OWIN中间件的新的IoC功能。
我在示例中看到的句子之一是这一句: app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 这个句子接收一个函数委托,它返回一个在实例中提供的管理器实现的新实例: public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,IOwinContext context) { var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 我个人不喜欢这个实现,因为我不能使用容器注入任何依赖,我想为这些经理。 还有一个“IdentityFactoryOptions”和“IOwinContext”是“神奇地”注入到我不能拉出到我的IoC容器的函数。 任何人都有更好的解决方法对这个实现? 解决方法
我从一个开箱即用的MVC5安装开始,并使用AutoFac作为IoC容器。听起来像我试图实现与你类似的目标,让我解释我做了什么。作为免责声明,我对使用IoC和Identity非常新。
我相信IOwinContext是不必要的角色作为一个IoC如果你使用自己的 – 我切换到注册我的ApplicationUserManager与AutoFac。为了实现这一点,我不得不: 从Startup.Auth中删除CreatePerOwinContext行,因为我将在AutoFac中注册ApplicationDbContext和ApplicationUserManager。 //app.CreatePerOwinContext(ApplicationDbContext.Create); //app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 修改ApplicationUserManager构造函数参数,并包含来自Create函数的所有内容。 public ApplicationUserManager(IUserStore<ApplicationUser> store,IdentityFactoryOptions<ApplicationUserManager> options) : base(store) { //all the code from the 'Create' function here,using `this` for `manager` } 将AccountController设置为具有一个构造函数,将一个ApplicationUserManager作为参数,并废弃从OwinContext中获取ApplicationUserManager的UserManager属性。 private ApplicationUserManager _userManager; //every thing that needs the old UserManager property references this now public AccountController(ApplicationUserManager userManager) { _userManager = userManager; } 使用AutoFac注册一切,包括IdentityFactoryOptions的实例。 var x = new ApplicationDbContext(); builder.Register<ApplicationDbContext>(c => x); builder.Register<UserStore<ApplicationUser>>(c => new UserStore<ApplicationUser>(x)).AsImplementedInterfaces(); builder.Register<IdentityFactoryOptions<ApplicationUserManager>>(c => new IdentityFactoryOptions<ApplicationUserManager>() { DataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ApplicationName") }); builder.RegisterType<ApplicationUserManager>(); 这是粗略的总结。我可能错过了一些其他的调整,我不得不做的一路上。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.net MVC Webforms视图引擎的缺点?
- asp.net-mvc – Ninject和连接字符串
- asp.net-mvc – 绑定动作参数以在ASP.NET MVC中请求cookie
- asp.net-mvc – 将Serverside MVC与Backbone.js结合使用
- asp.net-mvc – 单元测试ASP.Net MVC Action结果,调用Serve
- asp.net-mvc – MVC中的绑定集合
- asp.net-mvc – 在ASP.NET MVC中创建模型
- 在大型ASP.NET MVC2项目中组织文件的最佳方法是什么?
- asp.net – 如何在Repeater中查找控件
- asp.net-mvc – 使用ASP.NET Core和MVC存储本地文件
- 我如何设置我的ASP.NET项目来查找我的文件?
- asp.net – 使用Web Api,SignalR,MVC和OWIN的Nin
- asp.net-mvc – 如何让Visual Studio 2012检测虚
- asp.net – 在localhost中将IIS设置为Web开发服务
- asp.net – 来自masterpage的Html.RenderPartial
- asp.net-mvc – 启用/禁用每个控制器/操作方法的
- asp.net – 如何添加ROW_NUMBER到LINQ查询或实体
- asp.net core 系列 9 三种运行环境和IIS发布
- asp.net-mvc – ASP.NET MVC自动解码来自AJAX的J
- asp.net-mvc-3 – Razor View Page无法添加为新项