Since late September of 2010, I have been working on a contract with a Consulting Group on a project of theirs that is for an international laboratory.
At this point in time, I probably can't call it a 'large' application, but it's expandable and there are lots of moving parts.
We're using Prism 4 and Unity. We have, so far, about 6 AppModules some of which contain multiple views. We get user information via a service call and users are granted permission at the view level. Views are also specified a starting region in that same service call, as well as the version of the module.
At this point in time we have 4 popup controls that can be called from any of the views, with IDs to avoid return crashes along the way.
As part of application startup, I have a 'Launcher' that determines if we need more Isolated Storage, and interacts with the user to negotiate that. If the user allows it, ISO is used and not until that communication process is complete, are the "WhenAvailable" modules allowed to load.
As part of the startup, if a user has permission to run a view, the version of the module is checked against the version in ISO. If there is a new version, the old one is removed and the new one is inserted. If there's a module in ISO that the user no longer has permission for, it is removed.
We have localization setup to allow Left/Right Alignment and Left/Right flow plus localized text all being presented via a service call. Localized text is inserted by a locale-assigned admin through a database tool.
And to make it all just that much more fun, it will also run OOB... Prism, Loading modules as needed OOB... just wanted to say that out loud!
So Why Talk about it?
As you can imagine, it takes a bit of coordination between elements to get this application working. One of the big things is between application sessions on a user's machine. There are things that we want to persist across that void and Isolated Storage seems the best route.
So how do you do that communication, and with as little pain as possible?
Sterling 1.0 FTW
We begain using Sterling and had some early-adoption issues that Jeremy Likness
bailed us out on, and then we were rolling.
We hit the wall I think it was the end of last week when one of the objects I tried to save to ISO was not returned. I naturally assumed it was something I was doing, and started checking out the object I was storing. This is an object I'm getting from a service call and I'm simply retaining it. I knew there was an Observable collection in there that also contained yet another OC because I interact with those, but the rabbit trail actually goes on and on.
So I added table definitions for all that, and still got nothing in return.
So I did what anyone would do, I posted to The Sterling Codeplex site
since Jeremy had already pulled my head out once, I was hoping someone else would do the honors this time.
Jeremy responded, asked questions, and over the next couple days shared code, and beta drops of dlls from Jeremy until last night when I was actually able to write and read back in that entire object without doing any 'trimming' of the structure!
Jeremy was apparently working with a few of us on similar issues and it was great to see him turn this around so quickly.
In my opinion, if you have a need for an object-oriented database in Isolated storage for your Silverlight app... Sterling is it!
And in case you're not aware of it, Sterling is also available for WP7!
Thanks Jeremy andStay in the 'Light