Я получаю код «Значение не может быть пустым», вероятно, из-за того, что я не создаю объект интерфейса 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>());
}
}