【问题标题】:Use AspNetCore.Identity RoleManager and UserManager in an Interface在接口中使用 AspNetCore.Identity RoleManager 和 UserManager
【发布时间】: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 的优缺点

标签: c# asp.net-core .net-core dependency-injection asp.net-identity


【解决方案1】:

您上面描述的可以总结为将获取角色方法分为两个独立的方法:IAdministrationDataService.GetRolesList()_roleManager.Roles

缺点可以被认为需要更多的配置,并且可能导致您的项目中的业务逻辑复杂,需要更多的注释来解释该方法。但是优势很明显。以后如果你的业务逻辑发生变化或扩展,你不需要重新构建你的结构,因为你已经为getting roles方法设置了2个接口,IAdministrationDataService就像一个入口,它对于视图总是一样的,因此任何后端更改都不会影响您的前端。

就像app.UseRouting()app.UseEndpoints()一样,拆分意味着解耦控制,它会让你的项目灵活、易于扩展,但所有这些好处只有当你的项目扩展到一个复杂的、大的、完整的业务逻辑项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2020-08-10
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多