首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET Core错误CS0103名称'FetchToken‘在当前上下文中不存在

ASP.NET Core错误CS0103名称'FetchToken‘在当前上下文中不存在
EN

Stack Overflow用户
提问于 2022-04-26 12:20:07
回答 1查看 232关注 0票数 1

我正在实现ASP.NET Core-6 Web和Fluent验证。

我有这样的服务:

代码语言:javascript
复制
public class MyService
{
    private readonly string baseUrl;
    private readonly ILogger<MyService> _logger;
    private readonly IMemoryCache _cache;
    public MyService(
        IConfiguration config,
        ILogger<MyService> logger,
        IMemoryCache cache
        )
    {
        _logger = logger;
        _cache = cache;
    }

    public async Task<OAuthLoginResponse> FetchToken()
    {
        string token = string.Empty;
        if (!_cache.TryGetValue("TOKEN", out token))
        {
            var tokenmodel = await this.Authenticate();
            if (tokenmodel != null)
            {
                var options = new MemoryCacheEntryOptions()
                    .SetAbsoluteExpiration(
                          TimeSpan.FromSeconds(int.Parse(tokenmodel.expires_in) - 2));

                token = JsonConvert.SerializeObject(tokenmodel);
                _cache.Set("TOKEN", token, options);
            }

        }
        return JsonConvert.DeserializeObject<OAuthLoginResponse>(token);
    }
}

然后我尝试调用FetchToken并在CommandHandler中实现它:

代码语言:javascript
复制
using Microsoft.Extensions.Logging;
using Application.Services;

public class CreateTokenInitiationCommandHandler : IRequestHandler<CreateTokenInitiationCommand, BaseResponse>
{
    private readonly IDbContext _dbContext;
    private readonly IMapper _mapper;
    private readonly ILogger<CreateTokenInitiationCommandHandler> _logger;
    //private readonly IMemoryCache _cache;
    public CreateTokenInitiationCommandHandler(IDbContext dbContext, IMapper mapper, ILogger<CreateTokenInitiationCommandHandler> logger)
    {
        _dbContext = dbContext;
        _mapper = mapper;
        _logger = logger;
    }
    public async Task<BaseResponse> Handle(CreateTokenInitiationCommand request, CancellationToken cancellationToken)
    {
        var response = new BaseResponse();
        try
        {
            var token = await FetchToken();
            var headers = new Dictionary<string, string>();
            headers.Add("Authorization", $"Bearer {token.access_token}");
        }
        catch (Exception ex)
        {
            _logger.LogError("An Error occured " + ex.ToString());
            response = new BaseResponse { response_code = "96", response_description = "Error occured, contact admin" };
        }

        return response;
    }
}

问题是它没有看到我导入到CreateTokenInitiationCommandHandler中的FetchToken

我发现了一个错误:

错误CS0103名称'FetchToken‘在当前上下文中不存在

突出显示FetchToken。

即使我添加了Application.Services以导入FetchToken,错误仍然存在。

我该怎么解决这个问题?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 17:49:08

创建IMyService

代码语言:javascript
复制
public interface IMyService 
{
   Task<OAuthLoginResponse> FetchToken()
}

public class MyService : IMyService
{
    ...
    public async Task<OAuthLoginResponse> FetchToken()
    {
        ... your code
    }
}

将其添加到Program.cs或Startup.cs中:

代码语言:javascript
复制
builder.Services.AddScoped<IMyService, MyService>();

然后简单地将它添加到您的处理程序中&使用它:

代码语言:javascript
复制
public class CreateTokenInitiationCommandHandler : IRequestHandler<CreateTokenInitiationCommand, BaseResponse>
{
    private readonly IDbContext _dbContext;
    private readonly IMyService _service;
    private readonly IMapper _mapper;
    private readonly ILogger<CreateTokenInitiationCommandHandler> _logger;
    //private readonly IMemoryCache _cache;
    public CreateTokenInitiationCommandHandler(IDbContext dbContext, IMapper mapper, IMyService service, ILogger<CreateTokenInitiationCommandHandler> logger)
    {
        _dbContext = dbContext;
        _mapper = mapper;
        _service = service;
        _logger = logger;
    }
    public async Task<BaseResponse> Handle(CreateTokenInitiationCommand request, CancellationToken cancellationToken)
    {
        var response = new BaseResponse();
        try
        {
            var token = await _service.FetchToken();
            var headers = new Dictionary<string, string>();
            headers.Add("Authorization", $"Bearer {token.access_token}");
        }
        catch (Exception ex)
        {
            _logger.LogError("An Error occured " + ex.ToString());
            response = new BaseResponse { response_code = "96", response_description = "Error occured, contact admin" };
        }

        return response;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72013852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档