Da die Reihenfolge der Module nicht gelöst ist nicht garantiert Ich bin ein Problem mit diesem zu erreichen:Autofac Warten auf Modul zur Verfügung zu stehen
Ich habe ein Modul, das ein ScheduleService
registriert diese ScheduleService
für Triggerereignisse in Reihe verantwortlich ist Intervalle etc.
Ich kann in verschiedenen IScheduable
Artikel, die ich so mit der XML Configuration
. Das Problem, das ich habe, ist die IScheduable
Artikel erfordern die IScheduleService
bereit zu sein, so dass es sich registrieren kann.
Also in meinem <autofac><modules>
Ich habe
<module type="Namespace.ScheduleServiceModule, Namespace" />
Dann die Idee war ich ISchedulable
Artikel so viele verschiedene laden in konnte
<module type="SomeNamespace.ScheudleItem1, SomeNamespace />
<module type="SomeNamespace.ScheudleItem2, SomeNamespace />
<module type="SomeNamespace.ScheudleItem3, SomeNamespace />
<module type="SomeNamespace.ScheudleItem4, SomeNamespace />
Dies ist zur Zeit, wie ich es in diesen scheduleitem Module tun:
protected override void Load(ContainerBuilder builder)
{
builder.RegisterCallback(registry =>
{
var scheduleService = new TypedService(typeof(IScheduleService));
var registrations = registry.RegistrationsFor(scheduleService);
if (registrations != null && registrations.Any())
{
IComponentRegistration componentRegistration = registrations.First();
componentRegistration.Activated += (sender, args) =>
{
IScheduleService scheduleService = args.Instance as IScheduleService;
if (scheduleService != null)
{
OnScheduleServiceAvailable(args.Context, scheduleService);
}
};
}
});
base.Load(builder);
}
Dies ist die Überschreibung in jedem der ScheduleItems
protected override void OnScheduleServiceAvailable(IComponentContext context,
IScheduleService scheduleService)
{
scheduleService.Add(
new SqlSyncSchedulable(Enabled, IntervalMS, ConnectionString, SqlSelect,
context.Resolve<ILoggerService>(),
context.Resolve<IPersonService>(),
context.Resolve<ILoggingEventService>(),
context.Resolve<ITemplateService>(),
context.Resolve<ITemplateLoggingEventService>(),
context.Resolve<IRuntimeSettingsService>()));
}
Das ist ziemlich intermittierend. Der Artikel ISchedule
sollte sich selbst registrieren, aber das Problem ist, dass der Dienst Schedule
möglicherweise nach diesen Elementen registriert wird.
Es muss einen Weg geben, dies zu erreichen?
Können Sie Ihre Frage bearbeiten und Ihren 'OnScheduleServiceAvailable' Quellcode teilen? –
Aktualisiert mit dem OnScheduleServiceAvailable –
Können Sie stattdessen keine Abhängigkeiten von Factories ('Func') verwenden? Dass die Abhängigkeit nicht verfügbar sein muss, bis sie angefordert wird. Siehe [Delegate Factories] (http://docs.autofac.org/en/latest/advanced/delegate-factories.html) –
wimh