Проблема Serilog с ninject в консольном приложении ядра .net - PullRequest
0 голосов
/ 09 мая 2019

Я создал основное приложение .net и использую serilog в качестве логгера. Нинъект используется для разрешения зависимостей. У меня есть следующий код

using MyApplication.Injection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Ninject;
using Serilog;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace MyApplication
{
    class Program : IHostedService
    {
        private IKernel _kernel;
        private IDisposable _subscriber;

        public static async Task Main(string[] args)
        {

            var builder = new HostBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    Log.Logger = new LoggerConfiguration()
                     .WriteTo.File("consoleapp.log")
                     .CreateLogger();

                    services.AddLogging(configure => configure.AddSerilog());
                    services.AddSingleton<IHostedService, Program>();
                });

            await builder.RunConsoleAsync();
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            Console.WriteLine("Starting Kore.LineSplitter Service");
            _kernel = new StandardKernel(new DInjection());
            _kernel.Bind<IMYService>().To<MYService>();
            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            Console.WriteLine("Stopping.");
            if (_kernel != null)
            {
                _kernel.Dispose();
                _kernel = null;
            }
            return Task.CompletedTask;
        }
    }
}

using Microsoft.Extensions.Logging;

public class MYService: IMYService  
{
   private readonly ILogger _logger;
   public LineSplitterManager(ILogger<MYService> logger)
   {
     _logger = logger;
   }

   public void SayHello(ProcessCdrFile message)
   {
       _logger.LogInformation("Starting my application");
   }
}

Но я получил ошибку во время выполнения, как это

Ninject.ActivationException: 'Error activating ILogger{MYService}
No matching bindings are available, and the type is not self-bindable.
...