Dynamically Loading ModuleCatalog in Composite (PRISM) Silverlight Application


Intercept the Run method of your bootstrapper by defining a new Run method, fetch the list of modules (list trimmed to the user in question of course) and populate the catalog from this.


poc code?
Here you are (note I am using a custom RIA domain service to trim the list of modules)

    public class Bootstrapper : UnityBootstrapper
{
ModuleCatalog catalog = new ModuleCatalog();
new public void Run()
{
AuthenticationContext ctx = new AuthenticationContext();
EntityQuery<Module> query = ctx.GetModulesQuery();
ctx.Load<Module>(query, loadOperation =>
{
if (loadOperation.HasError)
{
throw new Exception(“Not able to load catalog”);
}
foreach (var item in ctx.Modules)
{
catalog.AddModule(new ModuleInfo()
{
InitializationMode = (InitializationMode)Enum.Parse(typeof(InitializationMode), item.InitializationMode, true),
ModuleName = item.Name,
ModuleType = item.TypeName,
Ref = item.Xap
});
}

base.Run();

},null);
}

protected override DependencyObject CreateShell()
{
Shell shell = Container.Resolve<Shell>();
Application.Current.RootVisual = shell;
return shell;
}

protected override IModuleCatalog GetModuleCatalog()
{
return catalog;
}
}

Comments (2)

  1. ThomasGustafsson says:

    Hey

    So you finally made an update to your blog… Awesome! ;o)

  2. Kevin says:

    How do you know who the user in question is?