Как добавить ILogger в DI? - PullRequest
       4

Как добавить ILogger в DI?

0 голосов
/ 19 сентября 2019

Я получаю код «Значение не может быть пустым», вероятно, из-за того, что я не создаю объект интерфейса IServiceCollection правильно, но я не считаю правильным добавлять сигнатуру каждого метода, пожалуйста, скажите мнекак правильно использовать объект этого класса, чтобы он передавался другим методам в пределах одного класса

 public class Program
{
    private const string ConfigFileName = "appsettings.json";

    private static IConfiguration _configuration;

    private static readonly Logger Logger = LogManager.GetLogger("Default");
    private static string _binding;
    public static IServiceCollection Service { get; private set; }

    public static void Main(string[] args)
    {
        var version = Assembly.GetEntryAssembly()?.GetName().Version;
        Logger.Info($"RC.Apps.Pro.Store.Node.HttpApi version {version} try start");
        Prepare();
        Logger.Info($"Starting WebHostBuilder...");
        CreateWebHostBuilder(args).Build().Run();
    }

    public static void RegisterServices()
    {
        _configuration = GetConfigFromFile(ConfigFileName);

        Service.AddSingleton<ILogger>(x => Logger);
        Service.AddScoped<IConfiguration>(x => _configuration);

        Service.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);


        Service.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    private static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseUrls(_binding)
            .ConfigureLogging(config => { config.ClearProviders(); });

    private static void Prepare()
    {
        try
        {
            RegisterServices();

            ValidateConfig();

            var hostName = _configuration[ConfigRabbitHostName];
            var port = int.Parse(_configuration[ConfigRabbitPort]);
            var username = _configuration[ConfigRabbitUserName];
            var password = _configuration[ConfigRabbitPassword];
            var heartbeat = ushort.Parse(_configuration[ConfigRabbitHeartbeat]);

            Logger.Trace(
                $"Get rabbit settings from config file: hostName : {hostName}, port : {port}," +
                $" username : {username}, password = {password}, heartbeat : {heartbeat}");

            var tags = new List<Guid>
            {
                Guid.NewGuid()
            };
            RabbitSingleQueue.Instance.SetAllowedTags(tags);

            Logger.Info($"Try connect to Mq");
            var connectionStrings = new RabbitConnectionSettings
            {
                HostName = hostName,
                Port = port,
                Username = username,
                Password = password,
                Heartbeat = heartbeat
            };

            RabbitSingleQueue.Instance.Start(connectionStrings);

            var host = _configuration[ConfigHttpHost];
            var httpPort = _configuration[ConfigHttpPort];
            Logger.Trace($"Get http settings from config file: host : {host}, port : {httpPort}");
            _binding = "http://" + host + ":" + httpPort;
        }
        catch (Exception e)
        {
            Logger.Error($"Api.Start error: {e.Message}, trace: {e.StackTrace}");
            throw;
        }
    }

    private static void ValidateConfig()
    {
        var provider = Service.BuildServiceProvider();
        HttpApiConfigValidator.ValidateConfig(provider.GetService<IConfiguration>(),
            provider.GetService<ILogger>());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...