我正在实现ASP.NET Core-6 Web和Fluent验证。
我有这样的服务:
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
我发现了一个错误:
错误CS0103名称'FetchToken‘在当前上下文中不存在
突出显示FetchToken。
即使我添加了Application.Services以导入FetchToken,错误仍然存在。
我该怎么解决这个问题?
谢谢
发布于 2022-04-26 17:49:08
创建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;
}
}https://stackoverflow.com/questions/72013852
复制相似问题