using System; using System.Collections.Generic; using Autofac; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Abstractions.Controllers { /// /// A common interface used to discord plugins /// /// /// You can inject services in the IPlugin constructor. /// You should only inject well known services like an ILogger, IConfiguration or IWebHostEnvironment. /// [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)] public interface IPlugin { /// /// A slug to identify this plugin in queries. /// string Slug { get; } /// /// The name of the plugin /// string Name { get; } /// /// The description of this plugin. This will be displayed on the "installed plugins" page. /// string Description { get; } /// /// true if the plugin should be enabled, false otherwise. /// If a plugin is not enabled, no configure method will be called. /// This allow one to enable a plugin if a specific configuration value is set or if the environment contains /// the right settings. /// /// /// By default, a plugin is always enabled. This method can be overriden to change this behavior. /// virtual bool Enabled => true; /// /// A list of types that will be available via the IOptions interfaces and will be listed inside /// an IConfiguration. /// /// If a field should be loosely typed, or null /// can be specified. /// WARNING: null means an unmanaged type that won't be editable. This can be used /// for external libraries or variable arguments. /// /// /// All use of the configuration must be specified here and not registered elsewhere, if a type is registered /// elsewhere the configuration won't be editable via the and all values /// will be discarded on edit. /// Dictionary Configuration { get; } /// /// An optional configuration step to allow a plugin to change asp net configurations. /// /// virtual IEnumerable ConfigureSteps => ArraySegment.Empty; /// /// A configure method that will be run on plugin's startup. /// /// The autofac service container to register services. void Configure(ContainerBuilder builder) { // Skipped } /// /// A configure method that will be run on plugin's startup. /// This is available for libraries that build upon a , for more precise /// configuration use . /// /// A service container to register new services. void Configure(IServiceCollection services) { // Skipped } /// /// An optional function to execute and initialize your plugin. /// It can be used to initialize a database connection, fill initial data or anything. /// /// A service provider to request services void Initialize(IServiceProvider provider) { // Skipped } } }