Как зарегистрировать собственный логгер с анонимным параметром в список сервисов ASP.NET приложения?
У меня есть веб приложение на razor pages и кастомный логгер, который записывает сообщение в текстовый файл.
public class CustomLogger<T> : ICustomLogger<T>
{
private readonly string _pathToLogs;
public void WriteLog(T type, ClaimsPrincipal userModel, string message)
{
File.WriteAllText(
path: $"{_pathToLogs}\\<<Путь к файлу>>",
contents: typeof(T) + "\n" + message
);
}
public CustomLogger(string pathToLogs)
{
_pathToLogs = pathToLogs;
if(!Directory.Exists(pathToLogs))
Directory.CreateDirectory(pathToLogs);
}
}
public interface ICustomLogger<in T>
{
public void WriteLog(ClaimsPrincipal userModel, string message) { }
}
И мне нужно, чтобы он мог быть зарегистрирован как сервис для последующего инжекта в модель страницы. Хочу попробовать сделать простой аналог встроенного логгера, но именно с записью в файл :
public class IndexModel : PageModel
{
public IndexModel(ICustomLogger<IndexModel> customLogger)
{
_customLogger = customLogger;
}
private readonly ICustomLogger<IndexModel> _customLogger;
public void OnGet()
{
// Чтобы вот так это дело работало.
_customLogger.WriteLog(User, "Error message!");
}
}
В сервисы регистрирую следующим образом
builder.Services.AddSingleton<ICustomLogger<Type>>(
new CustomLogger<Type>(
pathToLogs: builder.Environment.ContentRootPath + "\\Logs"
)
);
Разумеется, возникает ошибка "Невозможно разрешить сервис для типа ICustomLogger<Класс страницы>" при попытке внедрить этот сервис на любую другую страницу, чей класс я не поместил вместо Type. Я не понимаю как можно зарегистрировать свой логгер как сервис. Существует необузданное желание сделать именно так. Не хочется создавать инстанс на странице и не хочется отправлять сендер в методы. Ну и для общего развития интересно.
Я искал в сети возможные решения, но почти все из них списаны со статьи майкрософт по написанию логгера на основе ILogger, а те, что мне нужны не используют анонимный параметр.