private void OnPlugInActivated(object?sender, PlugInEventArgs e) { if (!this.IsEventRelevant(e)) { return; } this.BeforeActivatePlugInType(e.PlugInType); var plugIn = this.FindActivePlugin(e.PlugInType); if (plugIn != null) { return; } plugIn = this.FindKnownPlugin(e.PlugInType); if (plugIn is null) { return; } this.LockSlim.EnterWriteLock(); try { this.ActivatePlugIn(plugIn); } finally { this.LockSlim.ExitWriteLock(); } }
private void OnPlugInActivated(object sender, PlugInEventArgs e) { if (!this.IsEventRelevant(e)) { return; } var plugIn = this.FindActivePlugin(e.PlugInType); if (plugIn != null) { return; } plugIn = this.FindKnownPlugin(e.PlugInType); if (plugIn == null) { throw new ArgumentException($"Unknown plugin {e.PlugInType}.", nameof(e)); } this.LockSlim.EnterWriteLock(); try { this.ActivatePlugIn(plugIn); } finally { this.LockSlim.ExitWriteLock(); } }
private void OnPlugInDeactivated(object sender, PlugInEventArgs e) { if (!this.IsEventRelevant(e)) { return; } var plugIn = this.FindActivePlugin(e.PlugInType); if (plugIn == null) { return; } this.LockSlim.EnterWriteLock(); try { this.DeactivatePlugIn(plugIn); } finally { this.LockSlim.ExitWriteLock(); } }
private bool IsEventRelevant(PlugInEventArgs e) => typeof(TPlugIn).IsAssignableFrom(e.PlugInType);