using JiShe.CollectBus.Protocol.Interfaces; using Microsoft.Extensions.DependencyInjection; using System.Reflection; using Volo.Abp; using Volo.Abp.Modularity; namespace JiShe.CollectBus.Protocol { public class JiSheCollectBusProtocolT6452007Module : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddKeyedSingleton(nameof(T6452007ProtocolPlugin)); //RegisterProtocolAnalysis(context.Services); LoadAnalysisStrategy(context.Services); } public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context) { Console.WriteLine("StandardProtocolPlugin OnApplicationInitializationAsync"); var standardProtocol = context.ServiceProvider.GetRequiredKeyedService(nameof(T6452007ProtocolPlugin)); await standardProtocol.LoadAsync(); } public override void OnApplicationShutdown(ApplicationShutdownContext context) { Console.WriteLine("StandardProtocolPlugin OnApplicationShutdown"); base.OnApplicationShutdown(context); } public void LoadAnalysisStrategy(IServiceCollection services) { var assembly = Assembly.GetExecutingAssembly(); var analysisStrategyTypes = assembly.GetTypes().Where(t => !t.IsAbstract && !t.IsInterface && t.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IAnalysisStrategy<,>))); foreach (var analysisStrategyType in analysisStrategyTypes) { var service = analysisStrategyType.GetInterfaces().First(); services.AddKeyedSingleton(service, analysisStrategyType.Name,analysisStrategyType); } } } }