How to: Populate the Module Catalog from XAML
Overview
This topic describes how to build a XAML-based module catalog for a solution that uses the Composite Application Library. The module catalog contains the metadata for modules and modules groups in the application; it can be populated in different ways and from different sources. For example, it can be populated from a XAML file. An advantage of having a XAML catalog is that declaring object elements in XAML instantiates the corresponding .NET Framework object through its default constructor.
Note
This topic assumes that you are familiar with modules. For more information about modules, see the Module technical concept.
Prerequisites
This topic assumes that you have a solution built with the Composite Application Library that has a module. For information about how to do this, see the following topics:
- How to: Create a Solution Using the Composite Application Library. This topic describes how to create a solution with the Composite Application Library.
- How to: Create a Module. This topic describes how to add a new module to your solution.
Steps
The following procedure describes how to build a XAML-based module catalog.
To build a XAML-based module catalog
Add a new .xaml file, named ModulesCatalog.xaml, in your Shell project.
The root element of this .xaml file should be a ModuleCatalog instance. In addition to specifying the default namespaces, this root element must also specify the Modularity namespace, as shown in the following code.
xmlns:Modularity="clr-namespace:Microsoft.Practices.Composite.Modularity;assembly=Microsoft.Practices.Composite"
Add a ModuleInfoGroup child element to the ModuleCatalog root element for each module group you have.
Note
Putting modules inside module groups is optional. The properties that are set for a group will be applied to all its contained modules. Note that modules can also be registered without being inside a group.
Set the corresponding properties to each ModuleInfoGroup. The properties defined by the ModuleInfoGroup class are the following:
- Ref. The content of this property indicates the location from where the modules in the module group should be obtained.
- InitializationMode. This property specifies how all the group modules are going to be initialized. The possible values for this property are: WhenAvailable and OnDemand.
Add ModuleInfo objects to the catalog. ModuleInfo objects can be registered within a group or without a group. Note the following:
- If you want to register modules in a group, put one ModuleInfo element inside the ModuleInfoGroup tags for each module that the module group contains.
- If you want to register modules without a group, put the ModuleInfo element inside the ModuleCatalog tags.
Each ModuleInfo instance has the following properties:
ModuleName. This property specifies the logical name of the module.
ModuleType. This property specifies the type of the module.
Ref. The content of this property indicates the location from where the modules in the module group should be obtained. This property should be set if the module is not inside a module group.
InitializationMode. This property specifies how all the group modules are going to be initialized. The possible values for this property are WhenAvailable and OnDemand. The default value is WhenAvailable.
DependsOn. This property can be set to a list of the modules names that this module depends on.
Note
For more information about setting dependencies between modules, see How to Define Dependencies between Modules.
Note
The module catalog can also be created programmatically, by looking up modules in a specific folder or by reading a configuration file.
For more information about populating a module catalog programmatically, see How to: Populate the Module Catalog from Code.
For more information about populating a module catalog from a directory lookup or from a configuration file in WPF applications, see How to: Populate the Module Catalog from a Configuration File or a Directory in WPF.
The following code shows the XAML-based Module Catalog implementation included in the Remote Modularity QuickStart.
<Modularity:ModuleCatalog xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Composite.Modularity;assembly=Microsoft.Practices.Composite">
<Modularity:ModuleInfoGroup Ref="ModuleX.Silverlight.xap" InitializationMode="OnDemand">
<Modularity:ModuleInfo ModuleName="ModuleX" ModuleType="ModuleX.ModuleX, ModuleX.Silverlight, Version=1.0.0.0" />
</Modularity:ModuleInfoGroup>
<Modularity:ModuleInfoGroup Ref="ModulesWY.Silverlight.xap" InitializationMode="WhenAvailable">
<Modularity:ModuleInfo ModuleName="ModuleY" ModuleType="ModuleY.ModuleY, ModulesWY.Silverlight, Version=1.0.0.0">
<Modularity:ModuleInfo.DependsOn>
<sys:String>ModuleW</sys:String>
</Modularity:ModuleInfo.DependsOn>
</Modularity:ModuleInfo>
<Modularity:ModuleInfo ModuleName="ModuleW" ModuleType="ModuleW.ModuleW, ModulesWY.Silverlight, Version=1.0.0.0">
</Modularity:ModuleInfo>
</Modularity:ModuleInfoGroup>
<!-- Module info without a group -->
<Modularity:ModuleInfo Ref="ModuleZ.Silverlight.xap" ModuleName="ModuleZ" ModuleType="ModuleZ.ModuleZ, ModuleZ.Silverlight, Version=1.0.0.0" />
</Modularity:ModuleCatalog>
Outcome
A module catalog, which contains metadata for all the application's modules, is created and populated from a XAML file.
More Information
For information about other ways that you can populate the module catalog, see the following topics:
- How to: Populate the Module Catalog from Code
- How to: Populate the Module Catalog from a Configuration File or a Directory in WPF
For more information related to working with modules, see the following topics:
- How to: Load Modules On Demand
- How to: Define Dependencies Between Modules
- How to: Prepare a Module for Remote Downloading
For a complete list of How-to topics included with the Composite Application Guidance, see Development Activities.