ASP.NET Core Web API - 错误 CS0103 当前上下文中不存在名称 'FetchToken'
ASP.NET Core Web API - Error CS0103 The name 'FetchToken' does not exist in the current context
我正在实施 ASP.NET Core-6 Web API MediatR 和 Fluent Validation
我有这项服务:
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 中实现它:
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
我收到这个错误:
Error CS0103 The name 'FetchToken' does not exist in the current context
FetchToken 突出显示。
即使我添加使用 Application.Services 以导入 FetchToken,错误仍然存在
我该如何解决这个问题?
谢谢
创建IMyService
public interface IMyService
{
Task<OAuthLoginResponse> FetchToken()
}
public class MyService : IMyService
{
...
public async Task<OAuthLoginResponse> FetchToken()
{
... your code
}
}
将其添加到 Program.cs 或 Startup.cs :
builder.Services.AddScoped<IMyService, MyService>();
然后只需将它添加到您的处理程序并使用它:
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;
}
}
我正在实施 ASP.NET Core-6 Web API MediatR 和 Fluent Validation
我有这项服务:
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 中实现它:
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我收到这个错误:
Error CS0103 The name 'FetchToken' does not exist in the current context
FetchToken 突出显示。
即使我添加使用 Application.Services 以导入 FetchToken,错误仍然存在
我该如何解决这个问题?
谢谢
创建IMyService
public interface IMyService
{
Task<OAuthLoginResponse> FetchToken()
}
public class MyService : IMyService
{
...
public async Task<OAuthLoginResponse> FetchToken()
{
... your code
}
}
将其添加到 Program.cs 或 Startup.cs :
builder.Services.AddScoped<IMyService, MyService>();
然后只需将它添加到您的处理程序并使用它:
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;
}
}