AddSingleton не будет принимать AddSerilog - PullRequest
0 голосов
/ 02 апреля 2020

Я сталкиваюсь с проблемой, когда пытаюсь написать более умное консольное приложение с доступными журналами и конфигурацией.

Это то, что у меня есть:

namespace Client
{
    public class Program
    {
        public static IConfigurationRoot Configuration;

        private static int Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                        .WriteTo.Console(Serilog.Events.LogEventLevel.Debug)
                        .MinimumLevel.Debug()
                        .Enrich.FromLogContext()
                        .CreateLogger();

            try
            {
                MainAsync(args).ConfigureAwait(false);
                return 0;
            }
            catch
            {
                return 1;
            }
        }

        private static async Task MainAsync(string[] args)
        {
            // Create service collection
            Log.Information("Creating service collection");
            var serviceCollection = new ServiceCollection();
            ConfigureServices(serviceCollection);

            // Create service provider
            Log.Information("Building service provider");
            IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();

            try
            {
                Log.Information("Starting service");
                await serviceProvider.GetService<App>().Run();
                Log.Information("Ending service");
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Error running service");
                throw;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        private static void ConfigureServices(IServiceCollection services)
        {
            // Add logging
            services.AddSingleton(
                LoggerFactory.Create(
                    builder => { builder.AddSerilog(dispose: true); }));

            services.AddLogging();

            // Build configuration
            Configuration = new ConfigurationBuilder()
                           .SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
                           .AddJsonFile("appSettings.json", false)
                           .Build();

            // Add access to generic IConfigurationRoot
            services.AddSingleton(Configuration);

            // Add app
            services.AddTransient<App>();
        }

    }
}

Я сталкиваюсь с проблемой в методе ConfigureServices на линии builder.AddSerilog на всю жизнь, я не могу понять, почему он не может решить AddSerilog

1 Ответ

0 голосов
/ 02 апреля 2020

Я пропустил пакет: Serilog.Extensions.Logging

По какой-то причине VS или даже Resharper не смогли этого предложить.

...