/// <summary> /// 移除模块 /// </summary> /// <param name="module"></param> public void RemoveModule(IRtpModuleFactory factory) { lock (_syncModule) { if (_moduleFactories.Remove(factory)) { UninstallModule(factory); } } }
/// <summary> /// 卸载模块 /// </summary> /// <param name="factory"></param> private void UninstallModule(IRtpModuleFactory factory) { if (_modulesIndex.TryGetValue(factory, out var modules)) { foreach (var module in modules) { module.Uninstall(this); } _modulesIndex.Remove(factory); } }
/// <summary> /// 为通讯器添加模块,当通讯器活动时,该模块会被安装 /// </summary> /// <param name="module"></param> public void AddModule(IRtpModuleFactory factory) { lock (_syncModule) { _moduleFactories.Add(factory); if (_context.IsConnected) { InstallModule(factory); } } }
/// <summary> /// 安装模块 /// </summary> /// <param name="factory"></param> private void InstallModule(IRtpModuleFactory factory) { if (_modulesIndex.ContainsKey(factory)) { return; //模块已安装,不重复安装 } var modules = factory.Create(); if (modules == null) { return; //有可能工厂中的算法得到的是空的模块,这种模块不加载 } foreach (var module in modules) { _modulesIndex.Add(factory, module); module.Install(this); } }