次のコードでは、わかりやすくするために、2番目のクラスでconfigとmonitorを使用するのは簡単です。タイマーはどのように作成/登録/解決する必要がありますか?コンストラクターパラメーターとして2番目のクラスの値が必要なため、最初のクラスでは実行できないようですが、正しく理解していれば、すべてのレジスター/解決は最初のクラスで実行する必要があります。
using System;
using System.ServiceProcess;
using System.Threading;
using Autofac;
namespace MyServiceApp
{
static class MyServiceAppMain
{
static void Main()
{
using (var container = InitContainer())
{
container.Resolve<MyService>().Start();
}
}
private static IContainer InitContainer()
{
var builder = new ContainerBuilder();
builder.RegisterType<Configuration>().As<IConfiguration>();
builder.RegisterType<ServicesMonitor>();
builder.RegisterType<MyService>();
IContainer container =
builder.Build(Autofac.Builder.ContainerBuildOptions.None);
return container;
}
}
public partial class MyService : ServiceBase, IMyService
{
private Timer _processTimer;
private int _intervalSize;
private IConfiguration _config;
private ServicesMonitor _monitor;
public MyService(IConfiguration config, ServicesMonitor monitor)
{
InitializeComponent();
_config = config;
_monitor = monitor;
_config.ReadAppConfig();
}
public void Start()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
_intervalSize = _config.IntervalMinutes * (60 * 1000);
_processTimer =
new Timer(ProcessTimer_Elapsed, null, Timeout.Infinite, _intervalSize);
}
private void ProcessTimer_Elapsed(object sender)
{
_processTimer.Change(Timeout.Infinite, _intervalSize);
}
}
}