public void Register(PluginInfo pluginInfo) { try { if (pluginInfo.Type != PluginType.BackgroundThread) { throw new ArgumentException("Plugin must be a BackgroundThread type", nameof(pluginInfo)); } var existing = _registrations.FirstOrDefault(r => r.PluginGuid.Equals(pluginInfo.Guid.ToString(), StringComparison.OrdinalIgnoreCase)); if (existing == null) { existing = BackgroundThreadPluginRegistration.Create(pluginInfo); _registrations.Add(existing); } existing.CreateEndpointInstances(_hubContext); var list = Hubs.BackgroundPluginHub.BgPluginsList(); _hubContext.Clients.Group(Hubs.BackgroundPluginHub.ADMIN_GROUP_NAME).SendAsync("updateList", list); } catch (Exception ex) { SessionLog.Error($"Failed to instantiate plugin '{pluginInfo.Name}' ({pluginInfo.Guid}) from assembly {pluginInfo.Assembly.FullName}. See exception that follows."); SessionLog.Exception(ex); } }
public static BackgroundThreadPluginRegistration Create(PluginInfo pluginInfo) { var reg = new BackgroundThreadPluginRegistration(pluginInfo.Assembly, pluginInfo.TypeInfo, pluginInfo.Guid, pluginInfo.Name); return(reg); }