Пример того, как подключить долговременную функцию внедрения зависимости - PullRequest
0 голосов
/ 01 ноября 2018

После успешного создания и запуска простой функции Azure Durable в Visual Studio 2017 я хочу представить ведение журнала.

Шаблон проекта Visual Studio генерирует статический класс HttpStart с Запустите метод, содержащий необязательный параметр типа Microsoft.Extensions.Logging.ILogger.

Я понятия не имею, как подключить внедрение зависимостей в проект надежной функции. Может кто-нибудь указать мне пример того, как этого добиться?

Мне кажется, мне понадобится некоторый класс, внутри которого мне нужно будет использовать метод Microsoft.Extensions.Logging.LoggingFactory.CreateLogger ().

Я полагаю, что эта логика должна быть в классе контейнера, который каким-то образом подключен к конвейеру времени выполнения с помощью HostBuilder (аналогично использованию WebHostBuilder в статическом методе main).

Спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

@ Томас указал мне на примеры, которые я использовал для извлечения кода, который позволяет внедрять зависимости при написании проекта долгосрочной функции:

using System.IO;
using System.Reflection;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Extensions.Logging;
using tmetadastoreFnApp;
using Willezone.Azure.WebJobs.Extensions.DependencyInjection;
using ILogger = Microsoft.Extensions.Logging.ILogger;
using LogLevel = Microsoft.Extensions.Logging.LogLevel;

[assembly: WebJobsStartup(typeof(Startup))]
namespace tmetadastoreFnApp
{
    internal class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder) =>
            builder.AddDependencyInjection(ConfigureServices);

        private void ConfigureServices(IServiceCollection services)
        {

            services.AddSingleton<ILoggerFactory, LoggerFactory>();
            services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
            services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Trace));

            var serviceProvider = services.BuildServiceProvider();

            var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
            loggerFactory.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true });

            var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            LogManager.LoadConfiguration(Directory.GetParent(dir) + "\\nlog.config");

        }
    }
}
...