Могу ли я передать регистратор в ChatHub из Startup.cs, как я делаю это с другими сервисами, подобными этому
Я не уверен, почему вы хотите передать экземпляр регистратора в ChatHub
в Startup.cs
. Но, насколько я знаю, вы всегда можете ввести необходимые зависимости, когда вам нужно. Вам не нужно вручную передавать экземпляр регистратора в ChatHub
во время запуска. Как правило, это будет считаться плохой практикой. Просто объявите зависимость и дайте контейнеру DI внедрить ее .
<strike>services.AddSingleton(new Converter(_log));</strike>
services.AddSingleton<Converter>(); // DI will new it and inject logger for you
А также измените ваш ChatHub
конструктор, чтобы он принимал ILogger<ChatHub>
public class ChatHub : Hub
{
private readonly ILogger<ChatHub> _logger;
public ChatHub(<b>ILogger<ChatHub> logger</b>)
{
<b>this._logger = logger;</b>
}
public async Task SendMessage(string user, string message)
{
<b>this._logger.LogInformation($"send message to client\r\n {user}\t{message}");</b>
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Если вы хотите настроить инициализацию Converter, вы можете сделать это следующим образом:
services.AddSingleton<Converter>(sp => {
var logger = sp.GetRequiredService<ILogger<Converter>>();
// add more service or dependencies manually ...
return new Converter(logger, ...);
});