Я пытаюсь создать службу Windows с использованием Autofa c и Topshelf в. NET Core 3.1 проекте. Я новичок в использовании обоих, и, наконец, дошел до того, что я был готов к тестированию. Однако, когда приложение запускается в Debug, оно запускается и завершается сразу же, не затрагивая ни одной строки метода Start в моем ServiceControl. Никаких исключений, никакого вывода на консоль (кроме стандартного кода завершения), ничего, что я вижу, не помогает понять, почему он не вызывается. Я предполагаю, что это ошибка в том, как я регистрирую свои сервисы в Autofa c, но было бы здорово, если бы я мог видеть выставленное исключение или действительно любую информацию, которая поможет объяснить. Вот мой звонок HostFactory.Run
от Program.cs
:
HostFactory.Run(c =>
{
c.UseAutofacContainer(container);
c.SetServiceName("MyServiceName");
c.SetDisplayName("MyService Display Name");
c.SetDescription("My service's description.");
c.UseSerilog();
c.StartAutomatically();
c.RunAsLocalSystem();
c.Service<MyService>(s =>
{
s.ConstructUsingAutofacContainer();
s.WhenStarted((service, control) => service.Start(control));
s.WhenStopped((service, control) => service.Stop(control));
});
});
А вот код, отвечающий за создание контейнера Autofa c:
var configModule = new ConfigurationModule(config);
var builder = new ContainerBuilder();
builder.RegisterModule(configModule);
builder.RegisterType<MyService>();
builder.RegisterType<MySettingsService>().AsSelf();
// Some other interfaces and self-registered services here.
builder.Register(c =>
{
var settings = c.Resolve<MySettingsService>();
return new DatabaseContext(settings.DbConnectionString);
}).AsSelf().SingleInstance();
Стоит отметить, что MySettingsService
имеет зависимость от IConfiguration
в своем конструкторе. Насколько я понимаю, это обеспечивается модулем ConfigurationModule, но, опять же, я новичок в обеих этих платформах.