using System; using Autofac; using JetBrains.Annotations; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; namespace Kyoo.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 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 configuration step to allow a plugin to change asp net configurations. /// WARNING: This is only called on Kyoo's startup so you must restart the app to apply this changes. /// /// /// The Asp.Net application builder. On most case it is not needed but you can use it to /// add asp net functionalities. /// void ConfigureAspNet(IApplicationBuilder app) { // 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 } } }