Внедрение ILogger в функцию, вызываемую Thrift in. NET Core 3 - PullRequest
1 голос
/ 03 февраля 2020

Я хотел знать, как внедрить ILogger в функцию в ASP. NET базовом приложении, которое вызывается клиентом Java через Thrift.

Итак, демонстрация кода высокого уровня того, что я хочу сделать:

// ExecuteRequest is called by java client through Thrift
public class ThriftLayer
{
    ...
    public string ExecuteRequest(...params)
    {
        ...
        var result = RequestFunc1(...params);
        ...do processing
        return result;
    }
    ...
}
// Contains request functions called by ExecuteRequest
public class ServerRequestHandler
{
    ...
    public string RequestFunc1(...params)
    {
       return TaskFunc1(...params);
    }
    ....
}
// Functions in this class are called by both the Thrift layer(called by ServerRequestHandler) as well as a Console application
// In Console applications, we can inject the ILogger at Startup - No issues there. 
public class TaskFunctions
{
    private readonly ILogger<TaskFunctions> _logger;

    public TaskFunctions(ILogger<TaskFunctions> logger)
    {
        _logger = logger;
    }

    public string TaskFunc1(...params)
    {
       _logger.logInfo("<log message>");
       ...do processing
       return stringResult;
    }
}

Итак, я хотел знать, как я могу внедрить ILogger в TaskFunctions при вызове из Thrift?

1 Ответ

1 голос
/ 03 февраля 2020

Принятый ответ на этот вопрос в StackOverflow поможет вам.

Вам необходимо построить ServiceCollection вне ASP. NET Core's Startup класса .

  • часть MVC вашего приложения добавит эти сервисы в Startup.ConfigureServices метод
  • , а для создания другой части вашего приложения потребуется использование поставщика услуг в качестве такие var taskFunctionsWithInjected = ActivatorUtilities.CreateInstance<TaskFunctions>(serviceProvider); для того, чтобы получить зависимости
...