MIX10 – Resumo

Essa semana aqui em Las Vegas foi uma loucura. Depois da aventura que foi chegar aqui, teve a correria do dia a dia da conferência. Só agora (que estou no aeroporto esperando meu vôo para voltar para casa) que consegui tempo para organizar minhas ideias e atualizar o blog.

Segunda Feira

Para começar, não consegui uma conexão de internet durante o keynote do primeiro dia e ainda peguei um lugar desfavorável para tirar fotos. O keynote foi excelente e teve como foco o Windows Phone 7. Muita coisa interessante foi demonstrada e o aparelho parece ser fantástico. Queria muito poder ter um  agora mesmo. Com certeza eu comprarei um assim que for lançado.

Após o keynote fui passear no The Commons. Essa era uma área onde tudo acontecia e todos se encontravam quando não estavam em alguma session. Lá encontrei Tim Heuer e John Papa, e aproveitei para gravar um pequeno podcast em vídeo com cada um para o XAMLCast. Esses vídeos, assim como outros que gravei serão publicados no XAMLCast em breve. Foi ótimo conversar com eles. Eu estava preocupado em como me sairia com o inglês pois essa foi minha primeira viagem para fora do Brasil e fiquei muito contente mesmo por ter meu inglês elogiado pelo Tim e John. It was AWESOME!

Depois fui assistir uma session de Windows Phone 7 com Chalie Kindel. Achei que foi muita maldade dos palestrantes ficarem demonstrando o aparelho em todas as session sabendo que não poderíamos ter um (brincadeira, é lógico que achei ótimo ver o aparelho. estou apenas com inveja). Passei o resto do dia no Commons tentando conversar com outras pessoas para gravar para o XAMLCast mas não consegui pois todos estavam correndo.

P1110627 P1110650

A noite fui fazer compras no outlet e depois passear pela Strip (Las Vegas Boulevard) com outros brasileiros que estavam no evento. Assistimos ao show das fontes do Bellagio do topo da torre Eiffel, no cassino Paris. Aproveitei para tirar algumas fotos da cidade enquanto estava lá.

Terça Feira

P1110708 P1110544 P1110753 P1110815

Na terça feira eu peguei um lugar ótimo no keynote e consegui uma conexão estável de internet. Tirei muitas fotos e twitei o tempo todo durante o keynote. Fiquei muito impressionado com o progresso do IE9 e absolutamente maravilhado com a apresentação de Bill Buxton. O cara é genial.

Após o keynote, assisti a mais uma session e depois fui para o Commons novamente. Consegui gravar apenas com o Pete Brown neste dia e ainda desligaram a luz enquanto estavamos gravando. Espero que a gravação tenha ficado boa. Fui convidado para participar da trívia no Channel 9 Live com Scott Hanselman mas eu seria chamado apenas se alguém amarelasse e isso não ocorreu. Mas eu respondi a pergunta de qual era o code nome do Windows 95 (se vocês assistirem, o Scott até fala que eu ganhei um ponto por isso :D ). Quase morri de rir assistindo à trívia.

A noite eu tentei ir a uma festa dos Blend Insiders mas não consegui achar o endereço. Depois dei uma passada na GameStop da galeria próxima ao Venetian. Na volta fui para meu quarto para tirar um cochilo antes de ir para a festa no LAX e só acordei do cochilo na manhã seguinte. Estava exausto.

Quarta Feira

P1110876 P1110886

Na quarta feira eu fui assistir a uma session excelente sobre a arquitetura da plataforma do Windows Phone 7 e fui convidado para participar de um grupo de foco sobre Windows Phone 7 e dar feedback sobre o que achava sobre como está sendo feito o lançamento e quais eram as preocupações que tinhamos. Infelizmente não posso divulgar o que foi conversado no grupo de foco por causa de NDA (Non Disclosure Agreement). O importante é saber que eles estão ouvindo e vão levar em considração várias das preocupações que as pessoas estão tendo.

A noite fui fazer minhas últimas compras e depois fui com uns amigos da Microsoft Brasil assistir ao Cirque du Soleil –“O” no Bellagio. Que espetáculo maravilhoso! Pressinto mais uma coleção de DVD em minhas prateleiras em breve, mas essa eu farei com calma.

Durante esta viagem eu devo ter andado uns 40 Km no total. O mapa de Las Vegas engana e os lugares são muito mais longe do que parece. Minhas pernas não gostam mais de mim… O clima em Las Vegas é muito seco e estou com a boca toda rachada e nariz ressecado. Conheci muita gente, treinei meu inglês falado, me diverti bastante e aprendi muito. Não ganhei nada no cassino :(.

Em breve vou começar a postar aqui algumas dicas e tutoriais sobre desenvolvimento em Silverlight 4, Windows Phone 7 e afins. Os vídeos que gravei para o XAMLCast serão publicados em breve. Fiquem ligados e até mais.

Diario de Bordo MIX10 - Domingo

Galera,

Já é domingo (dia 14/março) e eu achei que seria interessante postar como está sendo o MIX10 para mim até agora e o que espero dos próximos dias.

Pra começar, a aventura, quer dizer, viagem. Perdi o horário do meu vôo saindo de São Paulo por causa do trânsito da minha cidade querida. Levei mais de 3 horas pra chegar no aeroporto. Me colocaram em um vôo seguinte 1:30h mais tarde, mas tiveram que refazer minha conexão. Originalmente a viagem era São Paulo –> Miami –> Las Vegas, com chegada às 10:10 e duração aproximada de 17 horas. Agora seria São Paulo –> Miami –> Los Angeles –> Las Vegas, chegando 12:30, mas ainda com duraçáo aproximada de 17 horas, só que saindo um pouco mais tarde. Acontece que eu não estava com sorte. O vôo para Miami foi tranquilo, mas o vôo de Miami para Los Angeles atrasou quase 2 horas na decolagem por causa de problemas na hora de carregar a bagagem. Quando decolamos eu já sabia que havia perdido a conexáo em LA. Pousamos em LA na hora que eu deveria estar chegando em Vegas. Chegando lá, marinheiro de primeira viagem, fui buscar minha mala na esteira (não precisava pois era conexão). Perdi uma hora nessa bincadeira e mais 30 minutos na fila da reclamação de bagagens. Depois do susto de achar que tinham perdido minha mala fui refazer minha conexão novamente. O próximo vôo para Vegas era as 16:35. Conexão “concertada", hora de comer alguma coisa pois já era 14:40 (19:20 no Brasil) e já fazia 12 h que eu havia comido algo. Fui “almoçar” um trash-food no Burger King do aeroporto e depois fui esperar meu vôo. Cheguei em Vegas às 18:30.

Que aventura. Eu tinha planos de fazer comprar no sábado e turismo hoje, mas meus planos tiveram que mudar. Para fazer um pouco de turismo enquanto fazia parte das compras hoje, fui a pé. Devo ter andado uns 12 Km. Fui do Luxor (onde estou hospedado) até o Ceasars Palace e voltei. Depois fui na direção oposta, para a loja da Frys e voltei. Por falar nisso, que lugar é aquele?!?! Precisamos de uma loja como a Frys em São Paulo. Imaginem um lugar do tamanho de um Sam’s Club, dedicado apenas a eletrônica e informática. Esse lugar é a Frys. Adorei! Ainda falta eu passar no Outlet pra comprar uma roupas. Terei que fazer isso amanhã de a noite. Me desejem sorte.

Amanhã é o grande dia. Em algumas horas começa o MIX10. Me acompanhem no Twitter (@kelps e @xamlcast) que estarei postando detalhes direto durante todo o Keynote e durante alguns momentos interessantes ao longo do evento.

Não se esqueçam o Keynote começa as 13:00 no horário do Brasil (9:00 AM em Las Vegas - eu errei no post anterior). Se puderem, acompanhem ao vivo em http://live.visitmix.com.

Tags: MIX10 Eventos MIX

XAMLCast no MIX10

Hoje a noite eu embarco para Las Vegas para participar do MIX10. Esta será uma viagem especial para mim por vários motivos:

  1. MIX. Precisa dizer mais alguma coisa?
  2. Será minha primeira viagem internacional.
  3. Estarei reprensentando o @XAMLCast no envento.Mix10_LoveTheWeb_grn_240

A quantidade de assuntos interessantes e importantes que será mostrada e disponibilizada no MIX10 não tem precedentes. Teremos novidades sobre Silverlight 4, Visual Studio 2010, Expression Blend 4, ASP.NET MVC2, muitas sessions sobre web standards e afins, provavelmente alguma coisa sobre o IE9 e a vedete do momento Windows Phone 7.

Estou muito empolgado com tanta novidade, principalmente com a consolidação do Silverlight como uma plataforma importante de desenvolvimento inclusive no Windows Phone 7. Aliás, estou muito empolgado com o Windows Phone 7. Não vejo a hora de colocar as mão nesse brinquedo. ;)

Como alguns de vocês já devem saber, eu estou trabalhando 1/2 período na Microsoft (ajudando o pessoal de DPE com algumas demandas técnicas) e, inevitavelmente, já estou sabendo de algumas coisas que vão acontecer, mas tudo o que posso dizer é que esse MIX será o melhor até hoje! Para aqueles que não poderão estar lá, assistam aos keynotes ao vivo via Silverlight Smooth Streaming pela internet nos dias 15 e 16, às 12:00h 13:00h (fiz conta errada) pelo site http://live.visitmix.com. Além disso, todas as sessions serão gravadas e disponibilizadas para download em até 24h.

Enquanto eu estiver lá, vou tentar gravar algumas “entrevistas” para o @XAMLCast com celebridades da nossa área. Inclusive, já tenho algumas confirmações (surpresa). Mas algumas pessoas são um pouco mais difíceis pois serão muito solicitadas durante o evento e é aí que peço a ajuda de vocês. Enviem tweets para pessoas que vocês gostariam que eu entrevistasse lá. Acredito que se algumas pessoas enviarem, nossa chances de conseguir aumentam. O Roberto Sonnino (@robertos_br) já começou esse movimento. Sigam ele e retweetem suas mensagens. Mas por favor, não enviem mais de uma mensagem para a mesma pessoa pois não queremos incomodar.

Estarei utilizando o Twitter sempre que possível (ou seja, sempre que tiver wifi). Para saber o que está acontecendo a cada instante, ou onde estou, sigam @kelps, @xamlcast, @rodrigokono e @robertos_br

Mais notícias em breve.

Tags: MIX10 Eventos MIX

Visual Studio 2010 Release Candidate disponível para download público

image

O Visual Studio 2010 e .NET Framework 4 Release Candidate estão disponíveis para download público (não assinantes do MSDN). A principal diferença dessa versão com relação ao Beta 2 são as melhorias de performance. Muita gente tem postado feedback extremamente positivo no Twitter sobre essa versão do Visual Studio.

Mas, nem tudo são rosas. Por estarmos bem no meio dos ciclos de desenvolvimento tanto do Visual Studio 2010 quanto do Silverlight 4, este não é suportado no VS2010 RC ainda. Como são times separados, decidiram não gerar uma versão do Silverlight 4 Tools para o Visual Studio 2010 RC e focar no próximo release do Silverlight 4 para dar esse suporte. Não há nenhuma data oficial para isso mas a minha impressão é de que isso vai ocorrer apenas no MIX, dia 15/março. Também acho que a versão do Silverlight 4 a ser lançada no MIX não será RTW ainda, justamente pelo fato de que o Visual Studio 2010 também ainda não estará em RTW.

Abaixo seguem algumas perguntas e respostas sobre essa nova versão do Visual Studio:

Que versões do Silverlight são suportadas?

O Visual Studio 2010 RC suporta apenas desenvolvimento de aplicações em Silverlight 3. O suporte a Silverlight 4 será disponibilizado apenas no próximo build público do Silverlight 4. Se você está desenvolvendo em Silverlight 4, continue com o Beta 2.

Serão disponibilizadas as versões Express do Visual Studio 2010 RC?

Não. As próximas versões Express do Visual Studio 2010 a ser liberadas serão RTW.

Preciso desinstalar outras versões do Visual Studio para instalar o RC?

O Visual Studio 2010 pode ser instalado em paralelo com o Visual Studio 2008 ou anteriores, mas é necessário remover tudo relacionado ao Visual Studio 2010 Beta/Beta2 antes de instalar o RC. Isso significa que devem ser removidos o Visual Studio 2010 Beta/Beta2 e o .NET Framework 4 Beta/Beta 2.

Há suporte para desenvolvimento para Mobile no Visual Studio 2010 RC?

Ainda não, mas haverá novidades em breve. Meu palpite é que ficaremos sabendo de alguma coisa na próxima semana por causa do World Mobile Congress 2010 que começará no dia 15/Fev. Vamos esperar.

Quando esta versão expira?

O Visual Studio 2010 RC expira em 30/Junho, mas isso não é problema pois a versão RTW está prevista para o próximo dia 12/Abril.

O Visual Studio 2010 RC suporta desenvolvimento de aplicações usando ASP.NET MVC 2?

Sim. Inclusive ele já vem com o ASP.NET MVC 2 RC 2 instalado, mas como houve 2 releases do MVC 2 RC 2 (devido a feedback), é recomendável atualizar a versão do MVC 2 após a instalação do Visual Studio 2010 RC. Mais detalhes no post do Phill Haack, nos links abaixo.

Posso utilizar o .NET Framework 4 RC em produção?

Sim. O .NET Framework 4 RC e o Visual Studio 2010 RC têm licença go-live, o que significa que podem ser utilizado em produção e não deve haver quebra de compatibilidade com a versão RTW.

 

Links:

Criando aplicações extensíveis em Silverlight 3 com MEF

Atualmente estou trabalhando em um projeto, em Silverlight 3, cuja principal característica é que será uma aplicação extensível. Isso significa que depois que a aplicação for publicada deverá ser possível escrever e instalar extensões facilmente, sem que seja necessário mexer no código da aplicação principal. Existem várias formas de atingir esse objetivo e vários padrões de desenvolvimento que podem ser utilizados para ajudar a realizar essa tarefa com mais facilidade. Neste post vou demonstrar como fazer isso utilizando o MEF – Managed Extensibility Framework, que ao meu ver é a forma mais eficiente e segura de tornar sua aplicação extensível.

Mas o que é exatamente o MEF?

MEF é um framework open source que está sendo desenvolvido já há algum tempo pela Microsoft, cujo objetivo é tornar a tarefa de criar aplicações extensíveis o mais simples possível. O código fonte pode assim com a última versão do MEF podem ser encontrados no Codeplex em http://mef.codeplex.com. Os códigos fonte e binários do MEF presentes no Codeplex são para o .NET Framework 3.5 e Silverlight 3. O MEF já faz parte do SDK do Silverlight 4, então não é necessário fazer nenhuma instalação extra (além do Silverlight 4 Tools para Visual Studio ou pelo menos o próprio Silverlight 4 SDK).

Por que utilizar o MEF?

Essa aplicação na qual estou trabalhando começou a ser concebida aproximadamente em Julho de 2009. Na época eu já havia ouvido falar do MEF mas ainda não fazia idéia do que realmente era e como ele poderia me ajudar. Além disso eu não tinha visto nada ainda sobre MEF e Silveright.

A aplicação tem como base o uso de serviços. Ela tem alguns serviços padrão implementados nativamente mas também oferece interfaces que podem ser implementadas por terceiros que estejam interessados em disponibilizar seus próprios serviços na aplicação. Minha idéia inicial era fazer a implementação toda manualmente, ou seja, eu teria que:

  • escrever todo o código responsável por baixar/ler o zip contendo a extensão,
  • ler um arquivo de manifesto que estaria listando todas as extensões disponíveis naquele pacote,
  • instanciar cada extensão e adicioná-la nas coleções internas da aplicação

Comecei a fazer uma prova de conceito e vi que tudo isso era possível de ser feito mas não era uma tarefa trivial. Havia bastante código a ser escrito e muitas situações a ser levadas em consideração.

Decidimos começar fazendo uma aplicação como prova de conceito sem a funcionalidade de extensibilidade e depois eu me preocuparia com isso. O tempo passou, a POC foi feita e foi um sucesso.

A questão de extensibilidade ainda me incomodava. Eu não queria ter todo aquele trabalho pois parecia que eu estava reinventado a roda. Era final de Outubro e o PDC havia terminado. Enquanto vasculhava as sessions que eu queria baixar para assistir vi uma que me interessou chamada Building Extensible Rich Internet Applications with the Managed Extensibility Framework. Fiz o download, assisti e no mesmo instante fiquei convencido de que seria assim que eu implementaria a extensibilidade da minha aplicação. Com aproximadamente 5 linhas de código e 2 referencias dava pra fazer 80% da funcionalidade que eu precisava!

Chega de blá, blá, blá, me mostra logo como funciona!

Chegamos no presente. Voltei a trabalhar naquela aplicação, só que que agora não é mais uma prova de conceito. Como o Silverlight 4 ainda não tem licença Go-Live a aplicação está sendo feita em Silverlight 3 mas já pensando em ser migrada para Silverlight 4 assim que for possível. Tudo que será mostrado aqui serve para Silverlight 3 e Silverlight 4.

Para utilizar o MEF é necessário fazer referência a 2 dlls (presentes no Codeplex) :

  • System.ComponentModel.Composition
  • System.ComponentModel.Composition.Initialization

O MEF funciona da seguinte forma: Você cria uma interface ou classe base e a marca com um atributo do MEF que indica que ela é uma extensão (chamada pelo MEF de Export). Essa interface será o seu contrato. Depois você cria classes que implementam o seu contrato (esses serão os seus serviços que serão exportados). Depois você cria uma propriedade (array ou collection) que conterá a sua coleção de serviços e marca essa propriedade com um atributo do MEF que indica que ele deve colocar alí as extensões apropriadas que ele achar (o MEF chama isso de Import). Depois basta chamar uma linha de código que diz ao MEF “preencha todos os Imports do meu objeto”. Parece meio confuso explicando assim então é melhor eu mostrar.

Criei uma solution de exemplo (o link para download está no final do post) contendo 5 projetos.

Solution no Visual Studio 2010

  • MEF.Extension : Contém uma extensão para a aplicação. É um exemplo do que será feito por terceiros e parceiros.
  • MEF.Lib : É a biblioteca core da aplicação. Contém a interface de contrato do serviço e 1 implementação nativa.
  • MEF.Tests : É a aplicação principal. Contém outras 2 implementações do serviço e todo o resto da lógica da aplicação.
  • MEF.Tests.Web : Web application utilizado para testar e depurar a aplicação.
  • System.ComponentModel.Composition.Packaging.Toolkit : Recompilação em Silverlight 3 de uma dll que só existe no SDK do Silverlight 4. Explicarei melhor mais adiante.

O projeto MEF.Lib faz referência a System.ComponentModel.Composition. 

Referência do MEF.Lib

No projeto MEF.Lib temos a interface IServico que foi marcada com o atributo InheritedExport. Esse atributo serve para dizer que qualquer classe que implementar essa interface será automáticamente considerada pelo MEF como um Export.

interface IServico

Temos também uma classe chamada ServicoRoot que é uma implementação de IServico.

classe ServicoRoot

O projeto MEF.Tests faz referência ao projeto MEF.Lib, às duas dlls do MEF e à dll de Packaging de MEF do Toolkit que foi recompilada e adicionada nessa solution. Temos também outras 2 implementações de IServico, chamadas ServicoA e ServicoB, implementadas exatamente da mesma forma que ServicoRoot.

Referencias do projeto MEF.Tests

Temos uma página principal chamada MainPage que contém apenas um botão e um listbox. A aplicação está implementada utilizando o padrão MVVM, então temos uma classe que é o ViewModel de MainPage. Nessa classe há uma propriedade chamada “Servicos” que será onde o MEF irá colocar todas as implementações que ele achar de IServico.

Classe MainPageViewModel

Na linha 9 do ViewModel podemos ver uma chamada ao “PartInitializer.SatisfyImports(this);” O que isso faz é avaliar a classe atual e procurar por todas as propriedades marcadas com o atributo Import ou ImportMany. Depois ela procura no seu catalogo por todas as classes marcadas como Export que satisfaçam os Imports solicitados, instancia cada uma dessas classes e preenche as propriedades dos Imports.

Na tela há um ListBox fazendo binding com a propriedade Servicos do ViewModel. Se executarmos a aplicação como está aparecerão 3 serviços no ListBox, como pode ser visto abaixo:

Aplicação rodando com extensões internas

Ótimo, isso já é metade do caminho, mas ainda falta carregar a extensão externa que está no projeto MEF.Extension. Como isso será feito?

Coloquei um botão na tela que fará o download do xap gerado pelo projeto MEF.Extension e o adicionará ao catalogo do MEF para que ele saiba onde procurar mas para que isso fosse possível foram necessários 2 passos:

  1. Alterarar o catalogo padrão do MEF para um tipo de catalogo que permita modificações dinâmicas em runtime.
  2. Recompilar e utilizar uma dll do Toolkit do Silverlight 4 que contém esse novo tipo catalogo além de uma classe que já faz o trabalho de executar o download do xap, ler seu manifesto, carregar suas dlls na memória e adicioná-las ao catalogo.

Na verdade nós começamos pelo passo 2, baixando o código fonte do Toolkit para o Silverlight 4. Depois criamos na nossa solution um projeto class library em Silverlight 3 chamado “System.ComponentModel.Composition.Packaging.Toolkit” com as mesmas propriedades do original que está no código fonte que baixamos e copiamos os arquivos das classes de um projeto para o outro.

Depois vamos para o passo 1, onde temos que fazer uma alteração, preferencialmente na inicialização da aplicação, criando o novo catalogo e preparando o MEF para aceitar módulos externos em runtime. Abaixo temos as aterações que foram feitas no arquivo App.xaml.cs.

Alterações na classe App.xaml.ca

Foi criada uma propriedade estática Catalog (que será utilizada mais adiante) e um método InitializeContainer() que registra o novo catalogo para ser utilizado pelo MEF.

Na linha 37 o xap atual é adicionado ao catalogo. Isso garante que tudo que estiver no xap da aplicação já funcione por padrão. Na linha 42 esse novo catalogo é registrado para ser utilizado pelo MEF. A linha 40, que está comentada, é de um exemplo em Silverlight 4 e não funciona (nem pareceu ser necessária) em Silverlight 3.

Na linha 46 adicionamos a chamada ao novo método no Startup da aplicação, antes de instanciar a tela principal.

A única coisa que falta agora é fazer o download do xap que contém a extensão e adicioná-lo ao catalogo. Para isso estou utilizando o evento de click do botão que está na tela:

 Código para download da extensão

No click do botão é feito o seguinte:

  • É criada uma nova Uri com o endereço de onde será feito o download do xap com a extensão. Estou usando UriKind.Relative pois o xap está no mesmo diretório onde está o xap da aplicação principal.
  • É chamado o método estático Package.DownloadPackageAsync passando a Uri do xap e uma função lambda que será responsável por adicionar o novo pacote no catalogo.

O que o DownloadPackageAsync faz é executar o download do xap, ler seu manifesto e carregar todas suas dlls na memória. No final ele está executando a função lambda que passamos, que adiciona esse pacote xap no catalogo.

Esse novo tipo de catalogo então notifica o MEF de que há um novo pacote disponível e o MEF recompõe a aplicação automaticamente (não é necessário pedir par ao MEF “satifazer os imports” novamente). É por isso que no atributo ImportMany da propriedade Servicos está sendo passado o parâmetro AllowRecomposition=true. Sem ele a recomposição automática não aconteceria.

Se executarmos a aplicação novamente agora, continuarão aparecendo apenas 3 serviços no ListBox, mas ao clicar no botão um quarto serviço aparece.

Aplicação rodando com extensões internas e externas

A aplicação agora é extensível e se recompõe automaticamente quando uma nova extensão é baixada. E o mais importante: Não tivemos que escrever nenhum código para atualizar a tela novamente!

Mas espere um momento, você não mostrou como a extensão foi feita!

Sim, eu sei disso, mas não tem segredo. É que eu queria mostrar algumas dicas para criar as extensões.

Vocês devem ter notado que a extensão é um xap. Para fazer isso , adicione um novo projeto Silverlight Application na solution e remova todo o seu código (App.xaml, App.xaml.cs, MainPage.xaml, MainPage.xaml.cs). Depois trate ele normalmente como uma class library. Não se esqueça de vinculá-lo à sua aplicação web de testes para que ele seja atualizado na pasta ClientBin sempre que compilar.

Vinculando projetos Silverlight na aplicação web

Esse projeto tem que fazer referencia à dll que contém os contratos (MEF.Lib) que por consequencia faz referência a dll principal do MEF. Se você simplesmente gerar o xap ele ficará quase do tamanho da aplicação principal pois conterá as 2 dlls, mas elas não precisam estar nesse xap pois já estarão no xap da aplicação então você deve marcar a opção “Copy Local” da MEF.Lib para falso.

 Diminuindo o tamanho da extensão

O que falta então?

Em uma palavra? Cache. Do jeito que está se eu fechar e abrir novamente a aplicação, a extensão que havia baixado antes não estará mais lá, mas isso é fácil de resolver. Basta salvar a extensão no IsolatedStorage e procurar por todas as extensões que foram salvas durante a criação do container. Eu criaria um diretorio addins salvaria os xaps lá. Depois basta procurar todos os xaps que estiverem nesse diretório, carregá-los na memória e adicioná-los no catálogo.

Conclusão

Esse post todo foi apenas para mostrar como é simples usar MEF e como isso pode ajudar. Você não precisa mais criar todas as funcionalidades da sua aplicação de uma vez ou sozinho. Crie pontos de extensão e vá incluindo as funcionalidades em pacotes ou deixe que a comunidade crie extensões para seu aplicativo.

Vale lembrar que sempre que você adiciona referencias que não estão no runtime aos seus projetos, o tamanho do xap final aumenta. As dlls do MEF aumentam o tamanho do xap em 96KB.

O MEF é muito mais do que o que coloquei aqui hoje, por isso tem esse tamanho. Eu pesei os prós e contras e para essa aplicação vale muito a pena.

Abaixo tem um link para o código fonte do projeto mostrado aqui. Happy MEFing!