Я работаю над приложением Windows. Программа создает ServiceScheduler
... ServiceScheduler
, запускается каждые 30 минут, читает список названий организаций и импортирует данные из каждой из этих организаций:
class Program
{
// entry point of the programe
static void Main(string[] args)
{
HostFactory.Run(serviceConfig =>
{
serviceConfig.Service<ServiceScheduler>(serviceInstance =>
{
serviceInstance.ConstructUsing(() => new ServiceScheduler());
serviceInstance.WhenStarted((execute, hostControl) => execute.Start(hostControl));
});
serviceConfig.StartAutomaticallyDelayed();
});
}
}
А вот ServiceScheduler
:
public class ServiceScheduler
{
private Timer _standardTimer;
private HostControl _hostControl;
private IKernel _kernel;
public ServiceScheduler()
{
_standardTimer = new Timer();
_kernel = new StandardKernel(new ImporterModule());
}
public bool Start(HostControl hostControl)
{
_hostControl = hostControl;
_standardTimer.Interval = 108000; // 30 min
_standardTimer.Elapsed += new System.Timers.ElapsedEventHandler(StandardTimerHandler);
_standardTimer.Start();
return true;
}
private void StandardTimerHandler(object sender, ElapsedEventArgs e)
{
// use ninject to resolve DB repository
var repository = _kernel.Get<IOrganisationRepository>();
var organisations = repository.GetAll(); //<-- list of organisation names
foreach (string organisationName in organisations)
{
// ImporterFactory creates the correct importer based on the organisationName
var importer = ImporterFactory.GetImporter(organisationName);
importer.import();
}
}
}
Я видел этот ответ , который гласит: Доступ к ядру возможен только из Program.Main или внутри фабрики ... это неправильно, что я инициализирую Kernel
внутри планировщика? Если да, то как мне это исправить?
Я не знаю, какой должна быть область действия ядра ядра? В приведенном выше примере я использую один экземпляр Kernel
для всего времени жизни приложения? Это правильно, или я должен создавать новый экземпляр на каждой итерации процесса импорта?
ImporterFactory
является классом stati c. Он принимает имя_организации и создает правильный импортер на основе имени_организации. Мне нужно будет использовать ядро ninject на заводе, как мне это сделать? Должен ли я передать Ядро на фабрику или создать новый kernel
внутри фабрики?