Dotnet core — ведение журнала в библиотеке классов

можно ли использовать Microsoft.Extensions.Logging, например, использовать ведение журнала в контроллерах (поместить конструктор и фреймворк обработать его с помощью DI), в библиотеке классов, в которой мое веб-приложение ASP.NET Core использует эту библиотеку? и как создать экземпляр класса и использовать метод?

public class MyMathCalculator
{
    private readonly ILogger<MyMathCalculator> logger;

    public MyMathCalculator(ILogger<MyMathCalculator> logger)
    {
        this.logger = logger;
    }

    public int Fact(int n)
    {
        //logger.LogInformation($"Fact({n}) called.");
        if (n == 0)
        {
            return 1;
        }
        return Fact(n - 1) * n;
    }
}

конечно, почему бы и нет?.

vasily.sib 31.05.2019 07:46

Да можно, а что вы пробовали?

rekiem87 31.05.2019 07:46

@ rekiem87 обновил вопрос, моя проблема в том, как создать экземпляр класса.

M.Khooryani 31.05.2019 07:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
4 525
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взято из предыдущий ответ:

... Это магия внедрения зависимостей, просто позвольте системе создать объект для вас, вам просто нужно запросить тип.

Это также большая тема, ... в основном, все, что вам нужно сделать, это определить классы как зависимости, поэтому, когда вы запрашиваете их, система сама проверяет зависимости и зависимости этих объектов, пока не разрешит все проблемы. дерево зависимостей.

При этом, если вам нужна еще одна последняя зависимость в вашем классе, вы можете добавить ее напрямую, но вам не нужно изменять все классы, использующие этот класс.

Чтобы использовать это в контроллере, пожалуйста, проверить официальные документы, вам просто нужно добавить свои зависимости в конструктор и выиграть!, в основном две части:

Добавьте в свой Startup.class

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddTransient<MySpecialClassWithDependencies>();
    ...
}

Затем в вашем контроллере:

public class HomeController : Controller
{
    private readonly MySpecialClassWithDependencies _mySpecialClassWithDependencies;

    public HomeController(MySpecialClassWithDependencies mySpecialClassWithDependencies)
    {
        _mySpecialClassWithDependencies = mySpecialClassWithDependencies;
    }

    public IActionResult Index()
    {
        // Now i can use my object here, the framework already initialized for me!
        return View();
    }

Это не должно быть другим, если ваш библиотечный класс находится в другом проекте, в конце дня вы добавите класс в автозагрузку, поэтому asp net знает, что загружать.

Если вы хотите, чтобы ваш код был чистым, вы можете использовать метод расширения, чтобы сгруппировать все ваши объявления и просто вызов services.AddMyAwesomeLibrary(), например:

В вашем awesomeLibraryProject:

public static class MyAwesomeLibraryExtensions
{
    public static void AddMyAwesomeLibrary(this IServiceCollection services)
    {
        services.AddSingleton<SomeSingleton>();
        services.AddTransient<SomeTransientService>();
    }
}

И в вашем стартапе

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddMyAwesomeLibrary();
    }

Фуу, да, просто опечатка

rekiem87 31.05.2019 08:08

Другие вопросы по теме