The objective of Advanced Remote Sensing Information Extractor (ARSIE) is to create a series of tools to help people acquire advanced information from geospatial data set, such as GIS and remote sensing data. ARSIE was designed based on a plug-in framework and programmed using a C# programming language under .NET framework 2.0. .Net is a programming framework created by Microsoft that developers can use to create applications more easily. Now the .NET framework version is 4.5. We selected .Net 2.0 framework since it is well supported by Windows XP/Windows Vista/Windows 7.
A plug-in framework provides a standard mechanism for developing applications that need to be easily evolved and customized. The standard version of plug-in framework have two major components: host application and standard plug-ins. Host application is capable of calling all the plug-ins while the plug-ins perform their tasks within the host application. A lot of famous software, such as ArcGIS, Adobe Photoshop, and Microsoft Office, more or less employs the plug-in framework. There are three main reasons for using plug-in framework: 1) to extend an application's functionality without the need to re-compile and distribute it to customers; 2) to add functionality without requiring access to the original source code; and 3) the business rules for the application change frequently, or new rules are added frequently.
Figure 1. Design framework of ARSIE
Figure 1 summarizes the framework of ARSIE. ARSIE was consisted of five main parts: host application, plug-in engine, plug-in interfaces, plug-in libraries, and auxiliary libraries. Host application is independent from all the plug-ins. However, most of the plug-ins need to call the built-in functions of Host application. Plug-in engine is in charge of identifying all kinds of plug-ins and placing them into a pool of plug-ins for the host procedure to call. In this software, plug-in engine using a reflection technique to perform late binding and access methods on types created at run time. Reflection in the .NET framework is a technique which enables people to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. People can also use reflection to create type instances at run time, and to invoke and access them. A class named "PluginHandle" was designed using the reflection technique to obtain all the contents of .dll files in the plug-in folder during runtime and interpret these contents according to the definitions of interfaces through a late binding.
To be recognized by the plug-in engine, all the plug-in libraries need to implemented according to the plug-in interfaces. Currently, there are five types of plug-in interfaces in ARSIE: ICommand, ITool, IMenu, IToolbar, and IDockableWindow. Each of these interfaces is related to a well-used user interfaces (UI) in visual C#. Figure 2 illustrates the class diagram of plug-in interfaces. It is noticeable that all the five plug-in interfaces inherited from the "IPlugin" interfaces. After all the plug-ins were loaded, their types were interpreted by the plug-in engine and would be placed as different types of UIs to the host procedure. IApplication defines the contents that plug-ins are able to call. Applog was designed to generate and save log information for ARSIE.