Silverlight TV 11: Dynamically Loading XAPs with MEF
- Posted: Mar 01, 2010 at 6:00 AM
- 47,005 Views
- 22 Comments
Download
How do I download the videos?
- To download, right click the file type you would like and pick “Save target as…” or “Save link as…”
Why should I download videos from Channel9?
- It's an easy way to save the videos you like locally.
- You can save the videos in order to watch them offline.
- If all you want is to hear the audio, you can download the MP3!
Which version should I choose?
- If you want to view the video on your PC, Xbox or Media Center, download the High Quality WMV file (this is the highest quality version we have available).
- If you'd like a lower bitrate version, to reduce the download time or cost, then choose the Medium Quality WMV file.
- If you have a Zune, WP7, iPhone, iPad, or iPod device, choose the low or medium MP4 file.
- If you just want to hear the audio of the video, choose the MP3 file.
Right click “Save as…”
- High Quality WMV (PC, Xbox, MCE)
- MP3 (Audio only)
- MP4 (iPod, Zune HD)
- Mid Quality WMV (Lo-band, Mobile)
Glenn Block, Program Manager working on MEF and self professed "MEF Maniac," makes a return visit to Silverlight TV. Glenn dives right into the code and shows how to use MEF to load and unload XAP files on demand. This is a great way to solve the problem
of how to handle large applications in Silverlight with large XAP files.
All code samples from the episode can be found via this link.
All code samples from the episode can be found via this link.
Follow @SilverlightTV on Twitter for the latest updates.
Comments Closed
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation,
please create a new thread in our Forums,
or
Contact Us and let us know.
Follow the Discussion
You guys Rock! This is such a clean solution for developing large app.
John, seriously you and Glenn should write a book on "Building large app with MEF & SL". I love the way John always stops at the right point to clear certain points. He did that in his book too.
Why is SL application split to XAPs. Why not split to DLL (one XAP shell and many DLL to download).
Split to DLL will be more "compatible and smooth" if you have single source code for SL and WPF application.
john what's in that koozie?
Having this flexibility will allow for more sophisticated applicaitons while maintaining a positive user experience by delivering functionality on demand.
Thanks for the video, glad to know this is on the road map.
>>john what's in that koozie?<<
Looks like a Bud can to me!
Having separate XAPs allows you to keep the proejcts completely decoupled perhaps to build them at different times without affecting each other (just one possibility). Another option is when you have one team building an architecture while another team or company builds a plug in for your architecture. The disconnected XAPs is a more elegant solution in many ways than separate DLLs as it gives you more opportunity to keep your code fully decoupled.
Ben & zenbeats - I'm not telling what's in the koozie
Well, it's a white Can,
you're smiling in that shot (looks like you're feeling good)
and you're hanging on to table table pretty tightly,
I'll say it's a Cold one.
“if it looks like a duck and sounds like a duck, it’s probably a duck”
Cesnek
XAPs provide a way to groups of related functionality into a simple deployment unit. Without such a unit you have to manage all dependencies at a very fine-grained level.
Glenn
Thanks Ben. We are currently planning a MEF book, we'll have to see if John is interested in authoring a chapter or two.
Glenn
Ran into an issue with composition happening more than once for a given element and that's because I was using page navigation and if the user navigated to a page, navigated away and then return to page, I was trying to load xap again. So what I did is made a change to the AddXap method to check if the aggregateCatalog already contains the deploymentCatalog
public void AddXap(string uri)
{
DeploymentCatalog catalog;
if (!_catalogs.TryGetValue(uri, out catalog))
{
catalog = new DeploymentCatalog(uri);
catalog.DownloadAsync();
_catalogs[uri] = catalog;
}
if (!_aggregateCatalog.Catalogs.Contains(catalog))
{
_aggregateCatalog.Catalogs.Add(catalog);
}
}
John, Glenn
Thanks for the great post, helped me get my head round a few issues concerning MEF!
I have a question tho, is it possible to have an independant navigation framework working in one or more of the child XAPs and import the required navigation elements into the host XAP to navigate to said child XAP?
Sorry if this is confusing, we are considering using MEF for a couple of large projects we're about to start and this is one of the requirements.
If more info about the projects would help you answer the question please feel free to contact me directly.
Kind regards,
Jonny
Hi Jonny
It is possible to integrate MEF with Navigation in SL4 and even to navigate cross-xaps. I demo that in my recent MIX talk which the code that I demo is also available. I posted a link to the code in the comments.
The session is here: http://live.visitmix.com/MIX10/Sessions/CL52
I would like to know following
- Does MEF support dynamic XAP loading of two Silverlight Application where one has "windowless" parameter set to true and
another with "windowless" parameter as false.
I have situation where I have to use Silverlight DataForms to enter Japanese Characters (IME support) and I also have HTML content to be displayed.
For HTML content - windowless parameter needs to be true and for IME support the windowless parameter should be false.
So, application using HTML content and IME characters cannot co-exist in a single XAP.
Any insight to above issue will be appreciated.
sdeepak
I don't see why it wouldn't work as the DeploymentCatalog does not have any UI dependencies. Haven't tried it though
All of this is AWESOME...
Question: is there a way to avoid downloading assemblies that are already included in the base XAP or in one of the dynamically downloaded XAPs?
Related Question: can I now (in Silverlight 4) enumerate the assemblies that an assembly references?
Here is an excellent description of the deployment catalog including information on how to create a XAP that references assemblies, but does not include them (copy local = false).
http://mef.codeplex.com/wikipage?title=DeploymentCatalog&referringTitle=Using%20Catalogs
The main caveat is that a XAP that does include these assemblies must already be loaded before loading such a XAP (otherwise when MEF enumerates the contained types, Silverlight will throw an exception about the assembly or referenced assemblies not being loaded).
Any chance of getting the sample code in VB?
I am failing to get it a C# conversion that works.
Thanks
Hi Glenn,
All of that is absolutely fantastic and I am trying to leverage every part of it (especially the DeploymentCatalogService approach, although I fear (and hope) that it will be overridden with a true distributable in the near future).
However, these samples are a little bit misleading; SatisfyImports() is not asynchronous and you have already loaded all the catalogs before the button is pressed; if you put AddXap() to the button click nothing will work; and this is exacly the scenario that we want: nothing should be pre-loaded unless it is going to be used. Essentially, you pre-load everything in the main page and if the user quick enough and the server slow enough it will break as well.
In short I would expect IPartImportsSatisfiedNotification to be more closely related to an async SatisfyImports.
Regards,
Ceyhun
Here is an excellent description of the deployment catalog including information on how to create a XAP. thanks
url: http://www.livetv.pk
id: 15606
thanks for giving nice website
good !!!
I have one some questions Glenn would you please be able to answer!
If i create different class libraries in my single silverlight application, means there is only one xap and in my SL application i am importing controls from other library projects , so what is the benefit ? because the xap is downloaded at client at srartup so how can i say its a dynamic loading .
In multiple xap project i can understand becasue control referenced in the other xap is loaded dynamically at the moment when i need that control .
Regards.
Remove this comment
Remove this thread
close