我正在尝试在服务器端Blazor应用中设置日志记录。
这是我从API获取数据的类:
public class LicenseService
{
private ILogger _logger;
public LicenseService(ILogger<LicenseService> logger)
{
_logger = logger;
}
public async Task<List<Licenses>> GetLicensesAsync()
{
List<Licenses> model = null;
var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
var task = await client.GetAsync("https://my.domain/v1/licenses");
if(!task.IsSuccessStatusCode)
{
_logger.LogError($"Result was {task.StatusCode}");
}
_logger.LogError($"Result was {task.StatusCode}");
var jsonString = await task.Content.ReadAsStringAsync();
model = JsonConvert.DeserializeObject<List<Licenses>>(jsonString);
return model;
}
}
这是一个调用该类的.razor页面。我要向new LicenseService();
传递什么?我无法实例化Ilogger
或Ilogger<LicenseService>
的新实例。
private async Task<List<Licenses>> GetLicenseData()
{
LicenseService service = new LicenseService();
var licenseData = await service.GetLicensesAsync();
return licenseData;
}
我确定这是因为我不太了解dotnet核心中的依赖项注入是如何工作的。
答案 0 :(得分:1)
理想情况下,如果您按照设计的方式使用依赖项注入,则根本不会在那里创建一个新的LicenseService实例,而是注入依赖项,顾名思义。
>在启动过程中,您可能需要进行以下服务注册(或类似的注册)。
services.AddScoped<LicenseService>();
在您的Razor页面的构造函数中,服务容器现在可以自动为您解决此依赖关系,同时还假设所有这些 依赖关系也得到了照顾。
public class YourPageModel : PageModel
{
private readonly LicenseService _licenseService;
public YourPageModel (LicenseService licenseService)
{
_licenseService = licenseService;
}
public async Task<List<Licenses>> GetLicenseData()
{
var licenseData = await _licenseService.GetLicensesAsync();
return licenseData;
}
}
更新:
可以使用顶部的以下语法通过DI将服务注入到Blazor组件中:
@inject LicenseService licenseService
,然后在您的方法中引用为licenseService
。有关示例,请参见此链接: