在接口中使用 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的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用多继承声明接口并实现接口

在类库中使用 API 接口,在 API 接口中使用类库? [关闭]

接口对象的实例化在接口回调中的使用

何时在Java中使用单方法接口

在 Dart 中何时使用 mixins 以及何时使用接口?

C#中接口的使用