I have just started a from-the-ground-up rewrite of my project, genesissmartclient.codeplex.com (The Genesis Smart Client Framework) using PRISM and Composite Application techniques.
Currently I have a standard PRISM setup with a Shell, Infrastructure Library and one Module. This has been split over WPF and Silverlight using multi-target development aided by the PRISM Project Linker. I recommend anybody who is looking to learn the basic
concepts of PRISM to go and download changeset 46607 of my project (http://genesissmartclient.codeplex.com/releases/view/46518).
As I have mentioned, I have just started a rewrite and I am basing alot (currently all) of the functionality of the modularization that I used to do myself on PRISM. This means that developers who are familiar with the Composite Application Library (PRISM)
and Inversion of Control containers should have little trouble easing into the Smart Client arena. I know that PRISM almost acts like a Smart Client by having automatic module discovery and updating built in, but it still lacks a management implementation
and some other features.
I am going to be elaborating my project over the next month to include a full management system to maintain user security and access, module registration and delivery and some other things. You can also read my article on the basic requirements for a PRISM
multi-target shell application here
Alot of the application is based on the multi-target techniques that the Microsoft Patterns and Practices team have applied to the StockTraderRI application, in fact I have copied their Behaviors and some other base classes, and adapted some others. I have
changed the mechanism used to display the Main View to disconnect it from the actual Shell application. The Shell application simply loads and executes the bootstrapper, which in turn loads and starts each module. I have adapted a module to contain the Main
View so that I can reuse the Shell application to host any form design that I might envision.
To explain what I mean: I sometimes want a User Interface that contains a Ribbon with a Docking control, and other times I want a simple menu/toolbar with a Tab control. By following PRISM coding recommendations I would have had to create two Shell applications
containing each unique Main View. With my seperation of interest between the Shell and the actual Main View, I simply ship a different Module to the client.
Please comment on any of the system components as I would love to improve them.