在接口中使用 AspNetCore.Identity RoleManager 和 UserManager
Posted
技术标签:
【中文标题】在接口中使用 AspNetCore.Identity RoleManager 和 UserManager【英文标题】:Use AspNetCore.Identity RoleManager and UserManager in an Interface 【发布时间】:2021-11-13 08:51:12 【问题描述】:我在一个接口中实现 RoleManager 和 UserManager,我知道一些潜在的好处,比如单元测试,这样做有什么缺点吗?
AdministrationDataService.cs:
public class AdministrationDataService : IAdministrationDataService
private readonly RoleManager<IdentityRole> _roleManager;
public AdministrationDataService(RoleManager<IdentityRole> roleManager)
_roleManager = roleManager;
public IQueryable<IdentityRole> GetRolesList()
var roles = _roleManager.Roles;
return roles;
IAdministrationDataService.cs:
public interface IAdministrationDataService
IQueryable<IdentityRole> GetRolesList();
那我就这样用了。
ViewRoles.cshtml.cs:
public class ViewRolesModel : PageModel
public List<IdentityRole> Roles get; set; = new List<IdentityRole>();
private readonly IAdministrationDataService _administrationDataService;
public ViewRolesModel(IAdministrationDataService administrationDataService)
_administrationDataService = administrationDataService;
public void OnGet()
Roles = _administrationDataService.GetRolesList().ToList();
使用这种方法而不是仅在 ViewRoles.cshtml.cs 中使用 RoleManager 还能获得哪些其他好处
【问题讨论】:
您在这里遇到什么问题了吗?或者只是想知道一些优势? @TinyWang 我只是想知道一些优点 也许依赖注入的优势。 我的问题更多是关于将 _roleManager 注入 IAdministrationDataService 然后将 IAdministrationDataService 注入 ViewRoles.cshtml.cs 与直接将 _roleManager 注入 ViewRoles.cshtml.cs 的优缺点 【参考方案1】:您上面描述的可以总结为将获取角色方法分为两个独立的方法:IAdministrationDataService.GetRolesList()
和_roleManager.Roles
。
缺点可以被认为需要更多的配置,并且可能导致您的项目中的业务逻辑复杂,需要更多的注释来解释该方法。但是优势很明显。以后如果你的业务逻辑发生变化或扩展,你不需要重新构建你的结构,因为你已经为getting roles方法设置了2个接口,IAdministrationDataService
就像一个入口,它对于视图总是一样的,因此任何后端更改都不会影响您的前端。
就像app.UseRouting()
和app.UseEndpoints()
一样,拆分意味着解耦控制,它会让你的项目灵活、易于扩展,但所有这些好处只有当你的项目扩展到一个复杂的、大的、完整的业务逻辑项目。
【讨论】:
以上是关于在接口中使用 AspNetCore.Identity RoleManager 和 UserManager的主要内容,如果未能解决你的问题,请参考以下文章