Introduction

Developing applications for QuickSharp, as distinct from developing applications with QuickSharp, can range from building simple plugins for the IDE to fully independent applications based on the QuickSharp platform.

Understanding plugins

A QuickSharp application has a completely modular architecture based on plugins; these are library assemblies located within the application's installation directory. Plugins are loaded on startup and each extends the application by adding extra features.

A plugin may be dependent on other plugins so they are loaded in the correct order to ensure each plugin's dependencies are loaded first. Any unsatisfied dependencies will result in startup being abandoned and the application will shutdown with an error message.

To see the plugins loaded by an application open the Help menu About box. This lists them in the order they were loaded; click the list to see more details.

Plugins are loaded as found whenever an application starts, plugin functionality is activated using the .NET Framework's reflection facility. An application discovers a plugin's capabilities by loading and inspecting its assembly. There are no configuration files or registries, the plugin itself is the sole source of its configuration information. This means that plugins can easily be added or removed to change the functionality available to the application. Providing all plugin dependencies are satisfied it will load any plugin it finds making development and deployment clean and simple.

Understanding applications

An application based on the QuickSharp platform consists of three separate parts: a driver program, the QuickSharp core platform and the application's plugin set.

QuickSharp components diagram

While the plugins determine the application's functionality, the driver controls its 'character'; it defines the application's basic behaviour and provides branding such as program icons, title and about box graphics.

Application startup

An application is launched via a multi-stage process involving each of the parts illustrated above.

The driver is the directly executable part of the application and defines 'bootstrap' configuration settings, provides product branding, receives command-line parameters and is responsible for starting the application by loading the QuickSharp.Core.

The QuickSharp.Core provides the main application user interface and implements the behaviour defined by the driver. The core is responsible for initializing the application, creating services such as user settings management, activating themes and loading plugins.

Each plugin loaded by the core extends the functionality presented by the application. When all plugins have been loaded successfully, the core performs various post-plugin load tasks and the application is ready for use.