One of the best finds I made in the last 2 (has it been 3?!?) years was finding Microsoft's Patterns and Practices Composite UI block.
At first, the idea of using yet another external, that weighed quite a bit, just to add a couple of attributes, sounded...wrong.
But then, when I got it...wow! Especially the EventBroker part...it really changed the design of all my software projects.
But once I was hooked -- the reality set in. V.1 was ported to CE -- but then V.2 wasn't. Then the CE version was dropped. What about ASP.NET? Then WPF came out and CAB was not updated. Finally it was (years too late). Then Silverlight came out...no V there...In other words, it appears that MSPP is herding cats, and not delivering a unified direction to follow (I have a LOT to grumble about MSPP's management, but this is not the right time or place for that).
I looked around for a port job already done, and did find mention of 'SCAB' (Cab for Silverlight) on the web, but the zip I downloaded was just a skeleton, that had no code in it...(ie, they hadn't even started)...
Because I need it now, I set out to port CAB to Silverlight myself -- at least the essentials: WorkItem, EventBroker, Commands, Services. (Workspaces is maybe not a portable solution, but I will look into it later).
As I see it the problems that have to be addressed are: a) the dependency of MSPP's CAB on local config files, WinForms, and finally, the size....270k at the smallest!
I think I would like to see enough to do CAB in Silverlight in about 60k.
The first part of the puzzle is the the EventBroker, which you massaged into being its own assembly with no dependencies: you'll find XAct.SmartClients.EventBroker here.
You'll notice that I did not want to automatically lock myself into a WorkItem architecture -- it will accept it, but it will also accept any other object as a Context object.And the size looks nice...at present 21k in Debug mode... and I think doesn't have dependencies on any namespace/assembly that Silverlight doesn't support.
Anyway...this first part works:
I'll next be tackling the Commands architecture...which you'll find on the same link when I am done.