以下是针对 MaxWell 工业上位机项目的三个完整模块实现
以下是针对 MaxWell 工业上位机项目的三个完整模块实现1. InfrastructureModule基础模块完整代码这个模块作为核心基础模块提供全局服务、硬件管理、仓储等基础设施。InfrastructureModule.cs// MaxWell.Modules.Infrastructure/InfrastructureModule.csusingPrism.Ioc;usingPrism.Modularity;usingMaxWell.Infrastructure.Hardware.Abstractions;usingMaxWell.Infrastructure.Hardware;usingMaxWell.Infrastructure.Persistence;usingMaxWell.Infrastructure.Persistence.Repositories;usingMaxWell.CommonBasis;namespaceMaxWell.Modules.Infrastructure;[Module(ModuleNameInfrastructureModule)]publicclassInfrastructureModule:IModule{publicvoidRegisterTypes(IContainerRegistrycontainerRegistry){// 核心基础设施服务单例containerRegistry.RegisterSingletonIHardwareDeviceManager,HardwareDeviceManager();containerRegistry.RegisterSingletonIDriverFactory,DriverFactory();containerRegistry.RegisterSingletonIAlarmQueue,AlarmQueue();containerRegistry.RegisterSingletonStationManager();// 仓储ScopedcontainerRegistry.RegisterScopedIStationRepository,StationRepository();// 硬件驱动自动扫描DriverRegistry.ScanAndRegister(typeof(MainBoardDriver).Assembly);}publicvoidOnInitialized(IContainerProvidercontainerProvider){varloggerLogManager.GetLogger(InfrastructureModule);logger.Info( InfrastructureModule 初始化完成 );// 初始化硬件设备管理器vardeviceManagercontainerProvider.ResolveIHardwareDeviceManager();Task.Run(async(){awaitdeviceManager.InitializeAsync();awaitdeviceManager.StartAllAsync();logger.Info(所有硬件设备已启动);});}}2. VisionModule视觉检测示例VisionModule.cs// MaxWell.Modules.VisionModule/VisionModule.csusingPrism.Ioc;usingPrism.Modularity;usingPrism.Regions;usingMaxWell.Modules.VisionModule.Views;usingMaxWell.Modules.VisionModule.ViewModels;namespaceMaxWell.Modules.VisionModule;[Module(ModuleNameVisionModule)][ModuleDependency(InfrastructureModule)]// 依赖基础模块publicclassVisionModule:IModule{privatereadonlyIRegionManager_regionManager;publicVisionModule(IRegionManagerregionManager){_regionManagerregionManager;}publicvoidRegisterTypes(IContainerRegistrycontainerRegistry){// 注册导航视图containerRegistry.RegisterForNavigationVisionInspectionView,VisionInspectionViewModel(VisionInspectionView);containerRegistry.RegisterForNavigationCameraSettingsView,CameraSettingsViewModel(CameraSettingsView);// 模块专有服务containerRegistry.RegisterSingletonIVisionService,VisionService();containerRegistry.RegisterSingletonICameraManager,CameraManager();}publicvoidOnInitialized(IContainerProvidercontainerProvider){// 模块初始化时注册到侧边栏_regionManager.RegisterViewWithRegion(SidebarRegion,typeof(VisionMenuItemView));varvisionServicecontainerProvider.ResolveIVisionService();visionService.InitializeCameras();}}VisionInspectionViewModel.cs示例publicclassVisionInspectionViewModel:ViewModelBase{privatereadonlyIVisionService_visionService;privatereadonlyIMediator_mediator;publicVisionInspectionViewModel(IEventAggregatoreventAggregator,IVisionServicevisionService,IMediatormediator):base(eventAggregator){_visionServicevisionService;_mediatormediator;StartInspectionCommandnewDelegateCommand(async()awaitStartInspectionAsync());}publicDelegateCommandStartInspectionCommand{get;}privateasyncTaskStartInspectionAsync(){varresultawait_visionService.StartInspectionAsync(ST001);if(result.IsSuccess){await_mediator.Publish(newVisionInspectionCompletedNotification{StationIdST001,Resultresult.Data?.ToString()??OK,ImagePathresult.ImagePath});}}}3. 模块热加载运行时动态加载/卸载DynamicModuleLoader.cs// MaxWell.CommonBasis/DynamicModuleLoader.csusingPrism.Modularity;usingSystem.Reflection;publicclassDynamicModuleLoader{privatereadonlyIModuleCatalog_moduleCatalog;privatereadonlyIContainerProvider_containerProvider;privatereadonlyDictionarystring,IModule_loadedModulesnew();publicDynamicModuleLoader(IModuleCatalogmoduleCatalog,IContainerProvidercontainerProvider){_moduleCatalogmoduleCatalog;_containerProvidercontainerProvider;}/// summary/// 运行时动态加载模块/// /summarypublicvoidLoadModule(stringassemblyPath,stringmoduleTypeName){try{varassemblyAssembly.LoadFrom(assemblyPath);varmoduleTypeassembly.GetType(moduleTypeName);if(moduleType!nulltypeof(IModule).IsAssignableFrom(moduleType)){varmodule(IModule)Activator.CreateInstance(moduleType,_containerProvider.ResolveIRegionManager());module.RegisterTypes(newContainerRegistryAdapter(_containerProvider));module.OnInitialized(_containerProvider);_loadedModules[moduleTypeName]module;_moduleCatalog.AddModule(moduleType);LogManager.GetLogger(ModuleLoader).Info($模块热加载成功:{moduleTypeName});}}catch(Exceptionex){LogManager.GetLogger(ModuleLoader).Error($模块热加载失败:{moduleTypeName},ex);}}/// summary/// 运行时卸载模块/// /summarypublicvoidUnloadModule(stringmoduleTypeName){if(_loadedModules.TryGetValue(moduleTypeName,outvarmodule)){// 执行清理逻辑if(moduleisIDisposabledisposable)disposable.Dispose();_loadedModules.Remove(moduleTypeName);LogManager.GetLogger(ModuleLoader).Info($模块已卸载:{moduleTypeName});}}}使用示例运行时加载// 在某个 ViewModel 或服务中privatereadonlyDynamicModuleLoader_moduleLoader;publicasyncTaskLoadVisionModuleAsync(){_moduleLoader.LoadModule(Plugins\MaxWell.Modules.VisionModule.dll,MaxWell.Modules.VisionModule.VisionModule);}总结InfrastructureModule作为基础核心模块VisionModule典型业务模块示例依赖 InfrastructureModule动态加载支持运行时根据需求加载/卸载模块适合客户定制化场景