MVVM Em Ação — Prism Library ! Configurando o Prism

Thiago Bertuzzi
Jan 14 · 5 min read

Fala galera,

Vou começar uma Serie de artigos falando um pouco sobre Frameworks MVVM, frameworks que facilitam nosso dia a dia de desenvolvimento com Xamarin.Forms.


Antes de começarmos recomendo que você esteja familiarizado com Xamarin.Forms e MVVM.

Caso não sugiro a leitura dos seguintes links :

O que é Xamarin.Forms?

Padrão MVVM

XAML

Existe muito conteúdo de Xamarin.Forms no meu Medium, então caso não conheça Clique aqui.


Vamos começar nossa serie de artigos falando de um dos meus Favoritos o PRISM!

Mas o que é Prism?

Direto da documentação :

Prism é um framework para criação de aplicações para WPF, UWP e Xamarin Forms, com foco em manutenção, baixo acoplamento e testes.

Cada plataforma tem sua própria release e é desenvolvida em cronogramas independentes.

Prism provê a implementação de um conjunto de design patterns que são super úteis na escrita de uma aplicação bem estruturada e de fácil manutenção, incluindo suporte a MVVM, Injeção de Dependencia, Commands, EventAggregator, etc.

Ou seja acredito que o Prism vai resolver a maioria dos seus problemas, facilitando a implementação correta do MVVM :D !

Certo, vou utilizar meu projeto PrismHeroes para explicar para vocês.

Se você não conhece esse projeto, ele foi feito ao vivo no Canal .Net. Você pode ver o repositório e o video clicando aqui.

Configurando o Prism

Após criar seu projeto Xamarin.Forms, Devemos adicionar os pacotes do prism .

Aqui ja começam as opções.

O Prism implementa diversos tipos de injeção de dependência para Xamarin.Forms, sendo eles :

· Prism.Autofac

· Prism.DryIoc

· Prism.Ninject

· Prism.Unity

Você pode utilizar aquele que estiver mais acostumado. Eu particularmente, gosto mais do DryIoc. Nos testes que fiz, foi o que apresentou uma melhor perfomance de utilização. Mas como diz a frase : Aqui fica a gosto do Freguês xD

Se você não conhece nenhum destes, sugiro uma lida sobre os mesmos. Assim você pode utilizar o que melhor lhe agrada.

Vamos ao Nuget e vamos instalar o Prism.Core 7.1.* em todos os projetos:

Em Seguida vamos instalar o pacote com o container que mais lhe agrada , o detalhe aqui é Sempre utilizar Prism.Container.FORMS, pois queremos utilizar o prism com Xamarin.Forms :

Importante, você pode ter um erro ao instalar o Prism 7.1 , se o seu Xamarin.Forms não for pelo menos o 3.2 … Por isso verifique se esta utilizando a versão correta,no meu caso esta no 3.4 então não tem problema :

Warning : Em teoria ao Instalar o Prism.Dryioc.Forms, não precisaria instalar o Prism.Core. Porem eu ja tive alguns problemas com o Prism, que só instalando o Prism.Core que resolveu. Então fica a dica ai :D

joia! Acabou ? Não!

Agora precisamos iniciar o Prism em todas as nossas plataformas.

Projeto .Core:

no App.Xaml , vamos substituir o Aplication padrão pelo PrismApplication, declarando o namespace : xmlns:prism=”clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms” :

Agora no App.xaml.cs vamos substituir a inicialização padrão pela do Prism :

Explicando :

Agora ao iniciar nossa aplicação sera chamado o método OnInitialized.

Nele devemos definir as ações que acontecem ao abrir o App.

É nele ,também, que vamos definir qual vai ser nossa View Inicial. No Caso estamos navegando para uma MainPage.

O RegisterTypes é o método responsável por toda injeção de dependência.

Nela que vamos determinar qual ViewModel fica responsável por cada View, alem de nossos singletons.

Calma que mais para frente, vamos entender melhor isso ;) .

iOS :

Devemos alterar o AppDelegate.cs como o abaixo :

Android:

Devemos Alterar o MainActivity.cs como o abaixo :

Explicando:

Basicamente nós substituímos a inicialização padrão das plataformas, pelos Initializers do Prism.

Podemos utilizar esses RegisterTypes, caso precisemos registrar algo especifico por plataforma. Inclusive se você tiver muitos registros, recomendo que crie um classe a parte.

Esse não é nosso caso, no momento.

Legal , agora vamos rodar no iOS para ver como ficou !

Eita, Erro! Mas porque ? Eu não acabei as configurações de inicialização ?

A resposta é Sim, nós acabamos a configuração… Mas…

Quanto utilizamos o Xamarin.Forms, nós podemos trabalhar sem MVVM. Sim , não somos obrigados a utilizar uma ViewModel e podemos fazer porquisse, digo, a implementação toda no Code-Behind da View.

O Prism é um Framework MVVM, então ele te obriga a trabalhar com esse conceito. Não basta eu dizer que quero navegar para MainPage.Xaml se ele não sabe quem é a Correspondente.

Então vamos criar a ViewModel corretamente.

Vamos criar a MainPageViewModel como abaixo :

Devemos herdar da BindableBase do Prism para ser considerada uma ViewModel valida.

Em seguida vamos registrar nossa pagina no App.cs,com a linha containerRegistry.RegisterForNavigation<MainPage>(); :

Agora na nossa View vamos adicionar as linhas xmlns:prism=”clr-namespace:Prism.Mvvm;assembly=Prism.Forms”
prism:ViewModelLocator.AutowireViewModel=”True” como abaixo :

Explicando o Prism possui um uma funcionalidade que liga a View na ViewModel automaticamente , o prism:ViewModelLocator.AutowireViewModel=”True".

Para isso temos que respeitar algumas regras. Se nossa pagina se chama MainPage nossa ViewModel precisa se chamar MainPageViewModel.

Se quisermos alterar essa nomenclatura, teremos que registrar a ViewModel para a View de forma manual. (como fiz no Exemplo do PrismHeroes)

Isto é simples , no App.cs basta dizer qual a ViewModel se registra aquela View : containerRegistry.RegisterForNavigation<MainPage,MinhaViewModelCustomizada>();

Eu prefiro utilizar o automático, mas ai fica a seu critério :D .

Pronto!, agora temos nosso projeto Xamarin.Forms rodando com prism :D

Utilize esse artigo como um complemento ao que foi feito em video :

Sugiro rever o que foi feito ate aqui. Parece muita coisa , mas eu garanto é muito rápido de fazer.

Existe também um template pronto para o Visual Studio do Windows , que ja cria para você o projeto configurado. Mas a ideia do artigo é entender o que esta acontecendo.

E a Documentação muito bem traduzida/adaptada do angelobelchior sobre o Prism.

Novamente eu digo,Se você não conhece esse projeto, ou não acompanhou o online .Você pode ver o repositório e o video clicando aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Aquele abraço!

Thiago Bertuzzi

Written by

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade