asp.net-mvc – MVC5架构中的Identity 2.0.0建议
我正在尝试将最近发布的ASP.NET Identity 2.0.0集成到3层MVC应用程序中.我不确定我是朝着正确的方向前进的.我可以看到两种方法.
在第一种方法中,我已经将Identity集成到每个逻辑层.有一些技术问题整合但仍在发展中. 在第二种方法中,使用专用于安全性的独立封装组件. 我现在已经采用了方法1,但质疑一切.还有,还有其他方法吗? 方法1 Web Startup.cs /App_Start/Startup.Auth /Controllers/Account /Controllers/Manage /Controllers/RolesAdmin /Controllers/UserAdmin /ViewModels /Views Business Logic /Service/AccountService /Service/ApplicationRoleManager /Service/ApplicationUserManager /Service/EmailService /Service/SmsService /Service/SignInHelper Data ApplicationDbContext ApplicationUser 所以,我只是简单地使用了Identity并将其插入到我认为合适的每个层中. Side-issue:我有点不舒服,在Web / App_Start / Startup.Auth中,我必须实例化Busness Logic对象才能调用 app.CreatePerOwinContext(ApplicationDbContext.Create); 在数据层中.我还没有考虑过这个问题.这是另一个问题(但我发现它与我选择的架构有关). 方法2 创建一个纯粹用于不包含层的安全性的程序集,即只需将Identity 2.0.0插入这个程序集即可.我的应用程序可以参考这个.然而,这与图层相反.但它封装了安全性.鉴于安全对象可以(或应该)在整个应用程序生命周期中驻留,这看起来根本不是一个坏主意.但是没有考虑过可扩展性. 解决方法
我已经采用方法1,并且在创建上下文时我有一个帮助器类,我尝试从HttpContext.Current.[“DbActiveContext”]获取上下文并使用它,如果它存在,如果不创建然后新的,并使用整个应用程序的单个上下文.因此,您不会为aspnet标识创建一个上下文,而为应用程序的其余部分创建另一个上下文.看起来您尝试在第一种方法中使用存储库模式,如果是这种情况,那么您的标识模型应该在数据库层中,对于完整存储库模式,您应该在创建时使用依赖注入通过这样做,在运行时创建对象之前,您不会具有依赖关系.
namespace Data.Common { public class ConnectionHelper : IConnectionHelper { private ApplicationDbContext _context; public ApplicationDbContext Context { get { if (_context == null && HttpContext.Current.Items["DbActiveContext"] != null) { _context = (ApplicationDbContext)HttpContext.Current.Items["DbActiveContext"]; } else if (_context == null && HttpContext.Current.Items["DbActiveContext"] == null) { _context = new ApplicationDbContext(); HttpContext.Current.Items.Add("DbActiveContext",_context); } return _context; } set { _context = value; } } } } 此外,如果您想在DI服务层中使用usermanager,您可以执行以下操作: public UserController() : this( new ApplicationUserManager(new UserStore<ApplicationUser>(new ConnectionHelper().Context)),new UserService()) { } 使用UserService签名,如: public class UserService { private readonly IRepository<ApplicationUser> _user; private readonly UserManager<ApplicationUser> _userManager; public UserService(IRepository<ApplicationUser> user,UserManager<ApplicationUser> userManager) { _user = user; _userManager = userManager; } public UserService() : this( new Repository<ApplicationUser>(new ConnectionHelper()),new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ConnectionHelper().Context))) { } 我希望这可以帮助你! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何为Umbraco创建项目包?
- asp.net – 为什么Telerik控件的某些WebResource.axd文件最
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- .Net core webapi使用httpClient发送异步请求遇到TaskCance
- asp.net – 当modal设置为TRUE时,jQuery UI对话框出现问题
- MVC .Net Cascade在使用EF Code First Approach时删除
- asp.net-mvc – MVC 4 Web API – 复合键的路由
- asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传
- asp.net – 当DataSource中没有数据时,DetailsView不可见
- asp.net-mvc – ASP.Net MVC在使用Ajax.ActionLink加载时在
- asp.net-mvc-4 – MVC 4.5 Web API路由无法正常工
- asp.net – DataMember Emit默认值
- asp.net – 如何添加一个访问控制允许原始头在II
- asp.net-mvc – Web Api调用返回404错误,GUID作为
- asp.net-core-mvc – 如何考虑请求和响应范围标头
- asp.net – 带有MVC 4.0的DotNetOpenAuth
- asp.net – 从AuthorizeAttribute Filter获取coo
- asp.net – 找出合适的工作语言:从C#分支出来
- 在asp.net页面之间传递数据
- asp.net-mvc – 测试使用DbContext的存储库的最佳