Как написать клиентский код, позволяющий вводить логгер - PullRequest
0 голосов
/ 11 июня 2019

Я пишу .NetStandard приложение, которое представляет собой тонкую оболочку для веб-службы / API. Я буду использовать этот клиент внутри основного приложения .net. Я хотел бы включить регистрацию в моем клиенте, но не уверен в том, каковы лучшие практики.

Я достиг желаемого результата, позволив потребителю кода вводить регистратор через конструктор, но это кажется грязным и не лучшим решением. Раньше я использовал Common.Logging, а затем просто кодировал интерфейс и позволял обеспечить реализацию во время выполнения, но я не уверен, как этого добиться с помощью новых пакетов Microsoft.Extensions.Logging.

Кроме того, у меня есть статический метод в классе без конструктора, который вообще не будет работать с инжекцией конструктора.

public class MyClass {

    public ILogger _logger;

    public MyClass(ILogger Logger){
        _logger = Logger;
    }

    public void SomeMethod(){
        _logger.LogDebug("Called SomeMethod");
    }
}

public class SomeServiceClass {

    public static DoService(){
        _logger.LogDebug("Doing Service");
    }
}

Я новичок в .net core, так что, возможно, я полностью упускаю суть. Я должен создать экземпляр регистратора для каждого класса (как в случае с log4net) или я должен позволить контейнеру DI создавать регистраторы и затем каким-то образом внедрять их? Пожалуйста, кто-нибудь может показать мне правильный способ обработки этого варианта использования.

1 Ответ

0 голосов
/ 12 июня 2019
public class MyClass {

    public ILogger _logger;

    public MyClass(ILogger Logger){
        _logger = Logger;
    }

    public void SomeMethod(){
        _logger.LogDebug("Called SomeMethod");
    }
}

Этот класс совершенно правильный.

public class SomeServiceClass {

    public static DoService(){
        _logger.LogDebug("Doing Service");
    }
}

Этот класс вонючий.Статические методы не очень полезны при попытке получить доступ к ServiceProvider, который использует Net Core.Я хотел бы рассмотреть вопрос об изменении этого метода на метод расширения для класса, который выставлен _logger?Избегайте статических методов для подобных вещей.

Альтернативным подходом может быть использование написанной мной библиотеки, которая позволяет использовать AOP в Net Core?(Если основной целью являются такие вещи, как ведение журнала)

https://github.com/f135ta/SimpleProxy

...