PRISM + MEF + MVVM -- Not sure where to really start? PRISM + MEF + MVVM -- Not sure where to really start? wpf wpf

PRISM + MEF + MVVM -- Not sure where to really start?


I have never used Prism+MEF myself, but in your question you mention you want to be able to load modules at runtime (with MEF). This is something you don't need to have MEF for, because Prism is quite good at doing that itself. The setup is pretty simple:

First, create a Prism module by implementing Modularity.IModule. It only requires one method: Initialize(). Here you can do any setup needed for your module. I generally also extend the constructor to inject any other interfaces I might need (using Unity).

Then, create a ModuleCatalog to specify the details of the module you created:

<Modularity:ModuleCatalog            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"           xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition">    <Modularity:ModuleInfo Ref="Your.ModuleProject.dll"         ModuleType="Your.ModuleProject.Module, Your.ModuleProject"         ModuleName="Module1"         InitializationMode="OnDemand" /></Modularity>

The InitializationMode is what you want to set if you need runtime loading. The catalog can be loaded in the Prim bootstrapper:

catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute));

Then all you need to do to load up your module, is get a reference to IModuleManager (Dependency Injection, yay!) and load up the module:

if (loadModule1)    var myModule = moduleManager.LoadModule("Module1");

Now the module is known to Prism. Keep in mind that unloading is not supported by Prism.


Everything you asked seems to be present on the samples that come installed with Prism, you just looked at the wrong ones.

Check out the StockTrader RI folder, that is described here.

It has a fairly complete sample for real-life applications, with some of complex scenarios and is implemented with Prism (obviously), MVVM and MEF.

Edit: Even though the link I provided is for Prism 5, the sample was also present on Prism 4.1. In that version, the documentation was not available online (at least as far as I remember) , but was instead offered on a .chm file installed with the Prism source code + samples. Don't know about v4.0, though.