#region License
// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
// This source code is made available under the terms of the GNU Lesser General Public License v3.0
// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
#endregion
namespace MiniSqlQuery.Core
{
///
/// An interface for simple plugins for use in extending Mini SQL Query.
/// Plugins are loaded from DLL's in the working directory matching the pattern "*.PlugIn.dll"
///
///
/// Plugins are created during the load process.
/// After all plugins are loaded they are sorted by the property.
/// Next the method is called on each in turn supplying a reference to.
/// Next the main application form is displayed and after all control creation is complete (i.e. after the Form
/// Shown event) a call to is made for each loaded plugin.
/// This is where instances should be created and assigned to buttons, menus etc.
/// These services provide access to the rest of the editor.
/// As the main form is closing down, each plugins method is called.
/// The class can be used to handle the basics of a plugin class to speed development.
///
public interface IPlugIn
{
///
/// Gets a brief description of the plugin.
///
/// The plugin description.
string PluginDescription { get; }
///
/// Gets the descriptive name of the plugin.
///
/// The plugin name.
string PluginName { get; }
///
/// Gets the plugin load order. For external plugins start with values over 1000.
/// This is a simple way of handling dependencies of other services etc.
///
/// The requested load order.
int RequestedLoadOrder { get; }
///
/// Initializes the plug in, called after the main form is displayed.
///
void InitializePlugIn();
///
/// Loads the plugin and stores a reference to the service container.
/// Called at application startup time.
///
/// The service container, allows access to other serivces in the application.
void LoadPlugIn(IApplicationServices services);
///
/// Called when the plugin is unloading (typically application shutdown).
///
void UnloadPlugIn();
}
}