如何在 asp.net core 中创建类扩展?

用户7739271

我想通过使用创建我的自定义服务userManager但我不知道如何访问dbContext.

public static class UserManagerExtensions
{
    public static async Task<IdentityResult> AddProfileAsync(this UserManager<ApplicationUser> userManager, UserProfileModel model)
    {

        // how to access to dbContext here???

        if (await dbContext.SaveChangesAsync() > 0)
        {
            return IdentityResult.Success;
        }

        return IdentityResult.Failed();
    }
}

用法:

public class UserController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;

    public UserController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task<IActionResult> Update(UserProfileModel model)
    {
        await _userManager.AddProfileAsync(model);

        return View();
    }
}

如何访问DbContext静态类中的类?

谢谢!

您应该将其注入控制器,然后将其传递给您的方法:

public class UserController : Controller
{
    private readonly DbContext _dbContext;
    private readonly UserManager<ApplicationUser> _userManager;

    public UserController(DbContext dbContext, UserManager<ApplicationUser> userManager)
    {
        _dbContext = dbContext;
        _userManager = userManager;
    }

    public async Task<IActionResult> Update(UserProfileModel model)
    {
        await _userManager.AddProfileAsync(_dbContext, model);

        return View();
    }
}

这样,您就可以完全控制数据库上下文的来源以及它存在的生命周期。

如果你的目标是像你所说的那样实际创建一个服务,你应该这样做,而不是使用扩展方法。你可以这样做:

public class UserController : Controller
{
    private readonly ProfileService _profileService;

    public UserController(ProfileService profileService)
    {
        _profileService = profileService;
    }

    public async Task<IActionResult> Update(UserProfileModel model)
    {
        await _profileService.AddProfileAsync(model);
        return View();
    }
}

public class ProfileService
{
    private readonly DbContext _dbContext;
    private readonly UserManager<ApplicationUser> _userManager;

    public ProfileService(DbContext dbContext, UserManager<ApplicationUser> userManager)
    {
        _dbContext = dbContext;
        _userManager = userManager;
    }

    public async Task<IdentityResult> AddProfileAsync(UserProfileModel model)
    {
        // do stuff
        if (await dbContext.SaveChangesAsync() > 0)
        {
            return IdentityResult.Success;
        }
        return IdentityResult.Failed();
    }
}

并且不要忘记在Startup.ConfigureServices使用中注册您的服务

services.AddTransient<ProfileService>();

这样,您现在就有了一个实际的服务,它具有明确的依赖关系并且您可以对其进行正确的测试,并且您还将更多的逻辑移出您的控制器,这使得它更容易推理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在Asp.net Core中缓存资源?

来自分类Dev

如何在ASP.NET Core中设置cookie validateInterval?

来自分类Dev

如何在ASP.NET Core中获取IIS版本

来自分类Dev

如何在ASP.NET Core 3.0中调用UseWebRoot

来自分类Dev

如何在ASP .NET Core 3.1中设置请求超时

来自分类Dev

如何在ASP.NET Core中设置默认区域?

来自分类Dev

maxReceivedMessageSize 如何在 Asp.net Core Api 中设置?

来自分类Dev

如何在asp.net core中配置依赖

来自分类Dev

如何创建 ASP.NET Core 类库

来自分类Dev

如何在ASP.NET Core Identity中扩展和验证会话?

来自分类Dev

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

来自分类Dev

如何在asp.net core 2.1中的View中填充自定义类

来自分类Dev

如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

来自分类Dev

如何在ASP.Net Core的服务层的基类中获取当前User?

来自分类Dev

如何在ASP.NET Core 1.0中创建报告(例如PDF,Excel,Word)?

来自分类Dev

如何在ASP.net Core 2中创建动态API

来自分类Dev

如何在ASP.NET Core中创建多个WebApi委托

来自分类Dev

如何在ASP.NET Core 2.2中创建链接以切换语言?

来自分类Dev

如何在Asp.net Core 1中创建请求以进行测试

来自分类Dev

如何在asp.net core 1.0 Web API的启动服务中创建后台任务?

来自分类Dev

如何在 ASP.NET Core 中创建可编辑的角色?

来自分类Dev

如何在ASP Net Core项目中添加类库项目的引用

来自分类Dev

如何在asp.net core中使用模型类生成表

来自分类Dev

如何在asp.net core 2中的静态方法/类中访问数据库上下文

来自分类Dev

如何在基于Service Fabric ASP.NET 5的服务中扩展从StatelessService派生的类?

来自分类Dev

如何在ASP.NET Core中使用Ajax创建评论列表?

来自分类Dev

如何在 ASP.net core 2.0 中生成和创建刷新令牌

Related 相关文章

  1. 1

    如何在ASP .NET Core中创建Azure AD用户?

  2. 2

    如何在ASP .NET Core中创建Azure AD用户?

  3. 3

    如何在Asp.net Core中缓存资源?

  4. 4

    如何在ASP.NET Core中设置cookie validateInterval?

  5. 5

    如何在ASP.NET Core中获取IIS版本

  6. 6

    如何在ASP.NET Core 3.0中调用UseWebRoot

  7. 7

    如何在ASP .NET Core 3.1中设置请求超时

  8. 8

    如何在ASP.NET Core中设置默认区域?

  9. 9

    maxReceivedMessageSize 如何在 Asp.net Core Api 中设置?

  10. 10

    如何在asp.net core中配置依赖

  11. 11

    如何创建 ASP.NET Core 类库

  12. 12

    如何在ASP.NET Core Identity中扩展和验证会话?

  13. 13

    如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

  14. 14

    如何在asp.net core 2.1中的View中填充自定义类

  15. 15

    如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

  16. 16

    如何在ASP.Net Core的服务层的基类中获取当前User?

  17. 17

    如何在ASP.NET Core 1.0中创建报告(例如PDF,Excel,Word)?

  18. 18

    如何在ASP.net Core 2中创建动态API

  19. 19

    如何在ASP.NET Core中创建多个WebApi委托

  20. 20

    如何在ASP.NET Core 2.2中创建链接以切换语言?

  21. 21

    如何在Asp.net Core 1中创建请求以进行测试

  22. 22

    如何在asp.net core 1.0 Web API的启动服务中创建后台任务?

  23. 23

    如何在 ASP.NET Core 中创建可编辑的角色?

  24. 24

    如何在ASP Net Core项目中添加类库项目的引用

  25. 25

    如何在asp.net core中使用模型类生成表

  26. 26

    如何在asp.net core 2中的静态方法/类中访问数据库上下文

  27. 27

    如何在基于Service Fabric ASP.NET 5的服务中扩展从StatelessService派生的类?

  28. 28

    如何在ASP.NET Core中使用Ajax创建评论列表?

  29. 29

    如何在 ASP.net core 2.0 中生成和创建刷新令牌

热门标签

归档