UBIK® Modules are loaded dynamically into the UBIK® Kernel by the UBIK® Injection Management based on the Microsoft Extensibility Framework (MEF).
[edit]
Introduction
Basic Prerequisites
Creating an own plugin requires to add references to
- System.ComponentModel.Composition
- UBIK.Injection
UBIK® Injection Management provides access to all the basic features used by the Kernel to identifiy and categorize the available plugins. This management is provided by a library called UBIK.Injection.
Interface: IUbikModule
The module must implement the UBIK.Injection.IUbikModule
interface and has to be registered for MEF composition by defining the export contract via an attribute.
[Export(typeof(UBIK.Injection.IUbikPlugin))]
public class TestModule : UBIK.Injection.IUbikModule
{
}
public class TestModule : UBIK.Injection.IUbikModule
{
}
Interface: IUbikInjectionMetaData
Managing modules correctly presumes the following information, as defined by the interface UBIK.Injection.IUbikInjectionMetaData
.
[ExportMetadata("ID", "C149402E-BC86-46D6-8D1B-63C86894EA77")]
[ExportMetadata("Type", typeof(TestModule))]
[ExportMetadata("Name", "TestModule" )]
[ExportMetadata("Description", "Tests the injection management")]
[ExportMetadata("Version", 1)]
[ExportMetadata("Company", "Augmensys GmbH")]
[ExportMetadata("Type", typeof(TestModule))]
[ExportMetadata("Name", "TestModule" )]
[ExportMetadata("Description", "Tests the injection management")]
[ExportMetadata("Version", 1)]
[ExportMetadata("Company", "Augmensys GmbH")]
Mandatory information
Name | Type | Description |
---|---|---|
ID | String | Unique ID of the module |
Type | System.Type | Systemtype of the module; used for filtering the module during loading. |
Optional information
Name | Type | Description |
---|---|---|
Name | String | Name of the module (for UI Presentation) |
Description | String | Descrirption of the module (for UI Presentation) |
Version | Integer | Version of the module. As there are more modules with the same ID, only the module with the highest Version is available. |
TargetApplication | PluginTargetApplication | Possibility to limit the module for a single type of application. |
MinimumKernelVersion | String | Minimum required Kernel version: Format x.x.x.x |
MinimumDatabaseVersion | String | Minimum required Database version: Format x.x.x.x |
Company | String | Information about the Company (for UI Presentation) |
Copyright | String | Copyright Information (for UI Presentation) |
Example
[Export(typeof(UBIK.Injection.IUbikModule))]
[ExportMetadata("ID", "C149402E-BC86-46D6-8D1B-63C86894EA77")]
[ExportMetadata("Type", typeof(TestModule))]
[ExportMetadata("Name", "TestModule" )]
[ExportMetadata("Description", "Tests the injection management")]
[ExportMetadata("Version", 1)]
[ExportMetadata("MinimumKernelVersion", "2.4.0.0")]
[ExportMetadata("MinimumDatabaseVersion", "2.4.0.0")]
[ExportMetadata("Company", "Augmensys GmbH")]
[ExportMetadata("Copyright", "2014, Augmensys GmbH")]
public class TestModule : UBIK.Injection.IUbikModule
{
public ISystemDefinitionProvider SystemDefinitionsProvider
{
get
{
return TestSysDefProvider.Instance;
}
}
public void Initialize(UBIKEnvironment environment)
{
}
public bool Initialized()
{
return true;
}
public void Terminate()
{
}
public List<ModuleInfo> DependencyModules
{
get;
} = new List<ModuleInfo>()
{
new ModuleInfo()
{
ID = Guid.Parse("A4FF45D7-20C7-451A-A58A-1001B5B1EA7B"),
Name = "MRO Plugin"
}
}
}
[ExportMetadata("ID", "C149402E-BC86-46D6-8D1B-63C86894EA77")]
[ExportMetadata("Type", typeof(TestModule))]
[ExportMetadata("Name", "TestModule" )]
[ExportMetadata("Description", "Tests the injection management")]
[ExportMetadata("Version", 1)]
[ExportMetadata("MinimumKernelVersion", "2.4.0.0")]
[ExportMetadata("MinimumDatabaseVersion", "2.4.0.0")]
[ExportMetadata("Company", "Augmensys GmbH")]
[ExportMetadata("Copyright", "2014, Augmensys GmbH")]
public class TestModule : UBIK.Injection.IUbikModule
{
public ISystemDefinitionProvider SystemDefinitionsProvider
{
get
{
return TestSysDefProvider.Instance;
}
}
public void Initialize(UBIKEnvironment environment)
{
}
public bool Initialized()
{
return true;
}
public void Terminate()
{
}
public List<ModuleInfo> DependencyModules
{
get;
} = new List<ModuleInfo>()
{
new ModuleInfo()
{
ID = Guid.Parse("A4FF45D7-20C7-451A-A58A-1001B5B1EA7B"),
Name = "MRO Plugin"
}
}
}
To be implemented for IUbikModule
Name | Description |
---|---|
SystemDefinitionsProvider | The instance of the SystemDefinitions for the respective module is provided. |
Initialize | Initializes the module. |
Initialized | Returns true when the plugin is initialized |
Terminate | Terminates the UBIKEnvironment if it has been initialized. |
DependencyModules | Returns the module information for which it has a dependency. |