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

时间:2018-10-31 21:17:31

标签: function azure logging code-injection

已经在Visual Studio 2017中成功创建并运行了一个简单的Azure持久功能,我想介绍一下日志记录。

Visual Studio项目模板使用以下命令生成静态HttpStart类: 运行方法,该方法包含类型为Microsoft.Extensions.Logging.ILogger的可选参数。

我不知道如何将依赖项注入持久功能项目中。谁能指出我如何实现这一目标的例子?

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

        }
    }
}