关于如何连接持久函数依赖注入的示例

Example on how to wire up durable function dependency injection

在 Visual Studio 2017 年成功创建并 运行 一个简单的 Azure Durable Function 后,我想介绍一下日志记录。

Visual Studio 项目模板生成静态 HttpStart class 运行 方法包含类型为 Microsoft.Extensions.Logging.ILogger 的可选参数。

我不知道如何将依赖注入连接到持久函数项目中。谁能给我举个例子来说明如何实现这一点?

在我看来我需要一些 class,在其中我需要使用 Microsoft.Extensions.Logging.LoggingFactory.CreateLogger() 方法。

我想这个逻辑需要在一个容器 class 中,该容器以某种方式使用 HostBuilder 连接到 运行 时间管道(类似于在静态 main 方法中使用 WebHostBuilder)。

谢谢

@Thomas 向我指出了我用来提取允许依赖注入在编写持久函数项目时起作用的代码的示例:

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");

        }
    }
}