क्योंकि मॉड्यूल के आदेश का समाधान किया जा रहा इसकी गारंटी नहीं है कि मैं इस को प्राप्त करने के लिए कुछ समस्या आ रही है:Autofac इंतजार उपलब्ध होने के लिए
मैं एक मॉड्यूल जो पंजीकृत करता है एक ScheduleService
इस ScheduleService
सेट पर ट्रिगर घटनाओं के लिए जिम्मेदार है अंतराल इत्यादि
मैं विभिन्न IScheduable
आइटमों में लोड करने में सक्षम हूं जो मैं XML Configuration
का उपयोग करके ऐसा करता हूं। मेरे पास समस्या है, IScheduable
आइटमों को IScheduleService
तैयार होने की आवश्यकता है ताकि यह स्वयं का पंजीकरण कर सके।
तो मेरी <autofac><modules>
मैं
<module type="Namespace.ScheduleServiceModule, Namespace" />
फिर विचार था मैं के रूप में कई अलग अलग ISchedulable
<module type="SomeNamespace.ScheudleItem1, SomeNamespace />
<module type="SomeNamespace.ScheudleItem2, SomeNamespace />
<module type="SomeNamespace.ScheudleItem3, SomeNamespace />
<module type="SomeNamespace.ScheudleItem4, SomeNamespace />
मदों में लोड कर सकता है यह वर्तमान में मैं उन scheduleitem मॉड्यूल में यह करना है:
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);
}
यह अनुसूचीइटम में से प्रत्येक में ओवरराइड है
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>()));
}
जो काफी अंतरिम है। ISchedule
आइटम को स्वयं पंजीकृत करना चाहिए लेकिन समस्या यह है कि Schedule
सेवा उन वस्तुओं के बाद पंजीकृत हो सकती है।
इसे प्राप्त करने का एक तरीका होना चाहिए?
क्या आप अपना प्रश्न संपादित कर सकते हैं और अपना 'ऑनशेड्यूल सेवा उपलब्ध' स्रोत कोड साझा कर सकते हैं? –
ऑनशेड्यूल सेवा के साथ अपडेट किया गया उपलब्ध –
क्या आप इसके बजाय कारखानों ('Func') पर निर्भरताओं का उपयोग करने में सक्षम नहीं हैं? निर्भरता तब तक उपलब्ध होने की आवश्यकता नहीं है जब तक अनुरोध नहीं किया जाता है। [प्रतिनिधि कारखानों] देखें [http://docs.autofac.org/en/latest/advanced/delegate-factories.html) –
wimh