Anda di halaman 1dari 28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?comp=32265

Visual Studio 2015:


Implementando uma
aplicao ASP.NET MVC 6
Veja neste artigo os novos recursos do framework ASP.NET MVC
6, em um tutorial sobre a implementao de um projeto deste
tipo no Visual Studio 2015.

AMicrosoftvemtrabalhandodesdeoinciode2014ematualizaesdoASP.NETedoVisual
Studio.EmFevereiro/2015foidisponibilizadooVisualStudio2015CTP6,novaversodaIDEde
desenvolvimentoquecontacomtotalsuporteparaaimplementaodeaplicaesbaseadasno
ASP.NET5(inicialmentechamadodeASP.NETvNext).
NoqueserefereaoASP.NET5,anovaversodestaplataformapassoupormudanasbem
significativas:
Existeagoraapossibilidadedeconstruodesoluesmultiplaforma.AlmdeWindows,tais
aplicaestambmpoderoserexecutadasapartirdesistemasMacouLinux
OnamespaceSystem.Webdeixoudeexistir,comosrecursosbsicosdedesenvolvimento
Webpassandoporumacompletareformulao.Muitasdestasmodificaeslevamem
consideraoafortetendnciademigraodeaplicaesparaambientesdecloud
computing
UmnovomodelodeprogramaoWebunificadochamadoMVC6serabaseparaa
implementaodeprojetosMVCe/ouWebAPI
HapossibilidadedehospedagemaindanoIISou,atmesmo,deimplementaodeum
processoprprioquecuidedisto.
Ageraodeprojetossobaformadedllsdeulugaramdulosqueseguemospadresde
pacotesdoutilitrioNuget.
EsteartigotempormetademonstraranovascaractersticasdoMVC6.Dentreosrecursosa
seremabordadosesto:

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

1/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

OnovomodeloparamanipulaodeitensdeconfiguraoemprojetosASP.NET5
Aintegraocomferramentasparagerenciamentodepacotesclientside,comoBower,Grunt
enpmnonovoVisualStudio
Umnovomecanismonativoparainjeodedependncias
OsViewComponents,estruturasquesubstituemnonovoMVCasantigasPartialViews
AsTagHelpers,querepresentamumaalternativanovaesimplificadaaousodeHTML
Helpers.
AfimdecumprirtalobjetivoserconstrudaumaaplicaoWebdeexemplonoVisualStudio2015
CTP6,comosdetalhesdeimplementaodestaltimaestandodescritosnasprximassees.
h3>ExemplodeimplementaodeumaaplicaoMVC6
ProcurandodemonstraralgumasdasnovidadesdisponibilizadascomoASP.NET5sercriadauma
novasoluoquefazusodosseguintesrecursos:
OMicrosoftVisualStudio2015CTP5comoIDEdedesenvolvimento
O.NETFramework4.6
OframeworkASP.NET5paraacriaodeumaaplicaoMVC6
OpluginjQueryOpenWeather.
Oexemploapresentadoaseguirconsistirnaconstruodeumsiteparaconsultatemperatura
dealgumascidadesnumdeterminadoinstante.ParaistoserimplementadoumaaplicaoMVC
chamadaTesteVS2015MVC,aqualirseconectaraumserviodeclimatologiaconhecidocomo
OpenWeather.OprojetoTesteVS2015MVCserdotipoASP.NETWebApplication,sendogerado
apartirdaseleodotemplateASP.NET5PreviewStarterWeb,conformeaFigura1.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

2/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura1.SelecionandootemplateASP.NET5PreviewStarterWebnoVisualStudio2015
NaFigura2possvelvisualizaraestruturaodoprojetoTesteVS2015MVC,comosdiferentes
arquivosgeradoslogoapsacriaodomesmo.

Figura2.EstruturainicialdoprojetoTesteVS2015MVC

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

3/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Asprximasseesdescrevemosdiferentesajusteseimplementaesqueseroefetuados,de
formaadetalharasnovidadesemodificaesnamaneiracomoaplicaesASP.NETso
concebidas.

Definindo os itens de configurao e o acesso aos mesmos


UmadasmudanassignificativasemprojetosMVC6foiasubstituiodoWeb.configpeloarquivo
config.json.Esteltimodocumentocontacomdeclaraesdeitensdeconfiguraonoformato
JSON,adotandoummodelomaisflexvelequefacilitaarealizaodecustomizaesnas
definiesdasquaisumaaplicaodepende.
NaListagem1estocdigoesperadoparaoarquivoconfig.json.Conformepossvelobservar,
umachavechamadaTestecontmdoissubnveisformadospelaspropriedadesCidade1e
Cidade2.Ocontedodestesdoisltimoselementosservirdebaseparaasconsultasaoservio
declimatologiaOpenWeather(nocasoespecficodesteexemplo,paraascidadesdeSeattlee
Paris).
Listagem1.Arquivoconfig.json
{
"Teste":{
"Cidade1":"Seattle,US",
"Cidade2":"Paris,FR"
}
}

OtipoConfigurationManagerdeixoudeexistir,tendosidosubstitudoporumaimplementao
derivadadainterfaceIConfiguration(estaltimapertencenteaonamespace
Microsoft.Framework.ConfigurationModel).
Pormaisqueoarquivoconfig.jsonrepresenteodefaultparaprojetosASP.NET5,asconfiguraes
deumaaplicaopodemcontarcomoutrasorigens.Adefiniodequaisarquivoscomitensde
configuraoseroutilizadosporumaaplicaoacontecenaclasseStartup(umequivalenteao
antigoGlobal.asax).NaListagem2encontraseaimplementaodestetipo:
ApropriedadeConfigurationarmazenarumainstnciadeumaclassequederivade
IConfiguration
JnoconstrutordotipoStartupumarefernciadaclasseConfiguration(namespace
Microsoft.Framework.ConfigurationModel)sercriadaeassociadapropriedadedemesmo
nome.PercebeseaindanestepontoousodosmtodosAddJsonFile(adicionandoocontedo
doarquivoconfig.jsonsconfiguraesdisponveis)eAddEnvironmentVariables(parao
acessoavariveisdeambiente).Outrosarquivos.jsondeconfiguraopoderiamser
includosaquiopcionalmente,bemcomoarquivoscomaextenso.ini(atravsdaoperao
AddIniFile)
OmtodoConfigureServicesserempregadonaconfiguraodomecanismodeinjeode
dependnciasdoASP.NETMVC.Estaoperaorecebecomoparmetroumarefernciado
tipoIServiceCollection(namespaceMicrosoft.Framework.DependencyInjection),aqualser
utilizadanomapeamentodedependnciasentretiposbsicos(comointerfaces)eas

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

4/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

implementaesconcretascorrespondentes.Nocasoespecficodoexemplodesteartigo,
sernecessrioalteraromtodoConfigureServices,demaneiraqueainstnciade
IServiceCollectionconsigamapeartodasasocorrnciasdeIConfigurationparaainstncia
associadapropriedadeConfiguration.QuantochamadaaomtodoAddSingleton,este
procedimentofazcomqueumanicadeinstnciadeIConfigurationsejautilizadana
resoluodetodasasdependnciasencontradasaolongodeumaaplicao,constituindo
assimumexemploprticodeaplicaodopatternSingleton.
importantedestacaraindaqueosuporteinjeodedependnciastambmfoiremodeladono
ASP.NET5.Emversesanteriores,aopoporestetipodeprticaexigiaousodeumcontainer
DIcomoUnity,NInjectouSpring.NET,dentreoutrasalternativaspossveis.Emboraestaopo
aindaestejadisponvel,anovaversodatecnologiaASP.NETtambmofereceummecanismo
nativoparaainjeodedependncias.
Listagem2.ClasseStartup
usingSystem;
usingMicrosoft.AspNet.Builder;
usingMicrosoft.AspNet.Diagnostics;
usingMicrosoft.AspNet.Diagnostics.Entity;
usingMicrosoft.AspNet.Hosting;
usingMicrosoft.AspNet.Identity;
usingMicrosoft.Framework.ConfigurationModel;
usingMicrosoft.Framework.DependencyInjection;
usingMicrosoft.Framework.Logging;
usingMicrosoft.Framework.Logging.Console;
usingTesteVS2015MVC.Models;

namespaceTesteVS2015MVC
{
publicclassStartup
{
publicStartup(IHostingEnvironmentenv)
{
Configuration=newConfiguration()
.AddJsonFile("config.json")
.AddEnvironmentVariables();
}

publicIConfigurationConfiguration{get;set;}

publicvoidConfigureServices(IServiceCollectionservices)
{
services.AddSingleton<IConfiguration>(_=>Configuration);

...
}

...
}
}

Configurando o uso da biblioteca Open Weather

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

5/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

NestaseoserdemonstradaautilizaoconjuntadasferramentasBower,Gruntenpm,afimde
incluirosarquivosnecessriosparausodabibliotecaOpenWeatheraoprojetodetestes.
importanteressaltarquenoVisualStudio2015amanipulaodepacotesclientside(como
bibliotecasdescriptsearquivosCSS)ficouacargodestassolues,comaprpriaIDEdispondo
defuncionalidadesquesuportamaintegraocomtaisgerenciadores.
Umprimeiroajustedeverserrealizadonoarquivobower.json,oqualcontmasdependnciasde
pacotesclientsidecontroladaspormeiodaferramentaBower.
Ainclusodenovospackagesnoarquivobower.jsonfacilitadagraasaosuporteoferecidopelo
IntelliSense.AcessandodadosdeumrepositrioquecontmospluginssuportadospeloBower,
esterecursoirlistarosdiversospacotesdisponveis,assimcomoasversesmaisrecentesdos
mesmos(Figura3).
NaseoexportsOverridedoarquivobower.jsonsernecessrioespecificaraindaquaisarquivos
dopluginOpenWeatherserocarregadosdentrodapastawwwroot(almdosscripts,esta
bibliotecatambmdisponibilizafolhasdeestiloCSSeimagensparaaexibiodeinformaes
climticas).
NaListagem3encontramsetodasasmudanasrealizadasnoarquivobower.jsonoutras
dependnciascomooBootstrapejQueryjhaviamsidoincludasanteriormente,durantea
criaodoprojetoTesteVS2015MVC.Ousodosmbolo~(til)antecedendoonmerodeverso
dopluginOpenWeather(1.2.0)indicaautilizaodequalquerpatchigualousuperiora0
(considerandoasverses1.2destabiblioteca).

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

6/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura3.OsuportedoIntelliSenseparaaediodoarquivobower.json
Listagem3.Arquivobower.json
{
"name":"WebApplication",
"private":true,
"dependencies":{
"bootstrap":"3.0.0",
"jquery":"1.10.2",
"jqueryvalidation":"1.11.1",
"jqueryvalidationunobtrusive":"3.2.2",
"hammer.js":"2.0.4",
"bootstraptouchcarousel":"0.8.0",

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

7/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

"openweather":"~1.2.0"
},
"exportsOverride":{
"bootstrap":{
"js":"dist/js/*.*",
"css":"dist/css/*.*",
"fonts":"dist/fonts/*.*"
},
"bootstraptouchcarousel":{
"js":"dist/js/*.*",
"css":"dist/css/*.*"
},
"jquery":{
"":"jquery.{js,min.js,min.map}"
},
"jqueryvalidation":{
"":"jquery.validate.js"
},
"jqueryvalidationunobtrusive":{
"":"jquery.validate.unobtrusive.{js,min.js}"
},
"hammer":{
"":"hammer.{js,min.js}"
},
"openweather":{
"js":"src/openWeather.js",
"css":"src/css/*.*",
"img":"src/img/"
}
}
}

VerificandoaestruturadoprojetoTesteVS2015MVCdentrodoSolutionExplorer,serpossvel
constatarqueopluginOpenWeatheraindanofoiinstalado(Figura4).Ainclusodosarquivos
dabibliotecaOpenWeatheraplicaodeexemploaconteceratravsdafuncionalidadeTask
RunnerExplorer,conformedetalhadomaisadiante.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

8/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

9/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura4.PluginOpenWeatheraindanoinstalado
ParavisualizarajanelaTaskRunnerExplorerclicarcomobotodireitodomousesobreoarquivo
gruntfile.js,acionandoemseguidaaopodemesmonome(Figura5).

Figura5.AcessandooTaskRunnerExplorer

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

10/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

ComajanelaTaskRunnerExplorerativa,clicardestavezcomobotodireitomousesobreo
itembowereselecionaraopoRun(Figura6).Astarefasconfiguradasparaaferramenta
Bowerseroexecutadas(combasenasinstruesdefinidasnoarquivogruntfile.js),comum
promptexibindooresultadodestaao(Figura7).

Figura6.ExecutandoastarefasparaaferramentaBower

Figura7.ResultadodaexecuodastarefasnoTaskRunnerExplorer
AoverificarnovamenteaestruturadoprojetoTesteVS2015MVC,serpossvelconstatarquea
instalaodopluginOpenWeatherfoiconcludacomsucesso(Figura8).

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

11/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura8.PluginOpenWeatherjinstalado

Criando o View Component de informaes climticas

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

12/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

ComoASP.NET5nomaispossvelousodePartialViews.Umnovotipodeestruturafoi
disponibilizado,deformaasubstituiresteselementos:tratasedorecursoconhecidocomoView
Component.
AssimcomoaconteciacomasPartialViewsemversesanterioresdoframeworkMVC,osViews
Componentstambmforamprojetadosdeformaafavoreceroreusoepossibilitarainserode
contedoempontosespecficosdaspginasdeumaaplicao.AdiferenanoMVC6estna
formacomoestescomponentessodefinidos.UmViewComponentdispensaacodificaodeum
novoControllercomumaActionassociadaaoprocessamentodoitemou,mesmo,aalteraode
umaconstruoprexistente.
AimplementaodeumnovoViewComponentenvolve:
Acodificaodeumanovaclasse,normalmentecriadanapastaComponentsdeumprojeto
MVC
UmanovaViewchamadaDefault.cshtmlelocalizadanocaminho
\Views\Shared\Components\<NomedoViewComponent>.Estearquivotemporobjetivo
produzirocdigoHTMLequivalentevisualizaodocomponente.
NaFigura9estassinaladaaorganizaoesperadaparaaimplementaodoViewComponent
ClimaCidade.Aideiaqueestecomponentesirvadebaseparaaexibiodeinformaes
climticasdeumacidadeespecfica.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

13/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura9.EstruturadoViewComponentClimaCidade
JaListagem4trazadefiniodoViewComponentClimaCidade(arquivoClimaCidade.cs):
AclasseClimaCidadeComponentderivadotipobsicoViewComponent(namespace
Microsoft.AspNet.Mvc).Essaestruturafoimarcadaaindacomoatributo

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

14/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

ViewComponentAttribute(namespaceMicrosoft.AspNet.Mvc),emcujoconstrutorindicadoo
nome/identificaodoViewComponentqueseestcriando(nocaso,ClimaCidade)
OmtodoInvokedevolvecomoresultadoumainstnciadeIViewComponentResult
(namespaceMicrosoft.AspNet.Mvc),aqualgeradaatravsdeumachamadaoperao
View.ImportantedestacaraindaousodoobjetoViewBag,noqualapropriedade
ReferenciaCidadeconteraidentificaodalocalidadeinformadacomoparmetroaose
acionaromtodoInvoke.
OBSERVAO:Porconveno,nomesdeclassesquerepresentamatributosterminamcomo
sufixoAttribute.Autilizaodeexpressesqueenvolvamumatributovinculandoomesmoauma
estruturadecdigodispensaousodetalsufixoaofinaldonome.Logo,aoseempregaroatributo
ViewComponentAttribute,aclassemarcadacomessaconstruoestarassociadaapenasauma
instruocomovalorViewComponent(entrecolchetes).
Listagem4.ClasseClimaCidade
usingSystem;
usingMicrosoft.AspNet.Mvc;

namespaceTesteVS2015MVC.Components
{
[ViewComponent(Name="ClimaCidade")]
publicclassClimaCidadeComponent:ViewComponent
{
publicIViewComponentResultInvoke(stringreferenciaCidade)
{
ViewBag.ReferenciaCidade=referenciaCidade;
returnView();
}
}
}

NaListagem5encontraseocontedodoarquivoDefault.cshtml,oqualrepresentaa
visualizaoemHTMLgeradapeloViewComponentClimaCidade:
Analisandomelhoresteconjuntodeinstrues,notasequetaltipodeestrutura(View
Components)nodifereemnadadeumaViewtradicional
AchamadaaomtodoopenWeatherfarcomqueumarequisiosejaenviadaaoservio
climticoOpenWeather.Asinformaesretornadasseroentoutilizadasnopreenchimento
dosdiferenteselementosdoViewComponent,fazendotambmusoparaistoderecursos
comoimagensquecompemopluginadicionadoanteriormente.
Listagem5.ArquivoDefault.cshtml(ViewComponentClimaCidade)
<styletype="text/css">

.infoTemperatura
{
backgroundcolor:lightblue;
paddingtop:30px;
paddingbottom:30px;
width:400px;
}

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

15/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

.legendaClima
{
fontsize:26pt;
paddingtop:30px;
}

</style>

<br/>

<divclass="infoTemperatura">

<imgsrc=""class="iconeclima"alt="WeatherIcon"/>

<pclass="legendaClima">
<strong>Localidade</strong>
<br/><spanclass="localidade"></span>
</p>

<pclass="legendaClima">
<strong>Temperatura</strong>
<br/><spanclass="temperatura"></span>
(<spanclass="temperaturaminima"></span>
<spanclass="temperaturamaxima"></span>)
</p>

<pclass="legendaClima">
<strong>Umidade</strong>
<br/><spanclass="umidade"></span>
</p>

</div>

<scriptsrc="~/lib/openweather/js/openWeather.js"></script>

<script>

$('.temperatura').openWeather({
city:'@ViewBag.ReferenciaCidade',
minTemperatureTarget:'.temperaturaminima',
maxTemperatureTarget:'.temperaturamaxima',
humidityTarget:'.umidade',
placeTarget:'.localidade',
iconTarget:'.iconeclima',
customIcons:'/lib/openweather/img/icons/weather/',
success:function(){
$('.infoTemperatura').show();
}
});

</script>

Ajustes na View _Layout.cshtml

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

16/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

AView_Layout.cshtml(localizadaem\Views\Shared\)tambmprecisarseralterada,afimde
quearefernciaparaabibliotecajQuerysejaaprimeiradeclaraodescriptsnestearquivo.Na
Listagem6possvelobservarocdigoesperadoparaestearquivo.
Listagem6.View_Layout.cshtml
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf8"/>
<metaname="viewport"content="width=devicewidth,initialscale=1.0">
<title>ExemplodeaplicaocriadanoASP.NETMVC6</title>

<scriptsrc="~/lib/jquery/jquery.js"></script>
<linkrel="stylesheet"href="~/lib/bootstrap/css/bootstrap.css"/>
<linkrel="stylesheet"href="~/css/site.css"/>
<linkrel="stylesheet"href="~/lib/bootstraptouchcarousel/css/bootstraptouchcarousel.css"/>
</head>
<body>
<divclass="navbarnavbarinversenavbarfixedtop">
<divclass="container">
<divclass="navbarheader">
<buttontype="button"class="navbartoggle"datatoggle="collapse"
datatarget=".navbarcollapse">
<spanclass="iconbar"></span>
<spanclass="iconbar"></span>
<spanclass="iconbar"></span>
</button>
@Html.ActionLink("TesteVS2015MVC","Index","Home",
new{area=""},new{@class="navbarbrand"})
</div>
<divclass="navbarcollapsecollapse">
<ulclass="navnavbarnav">
<li>@Html.ActionLink("Home","Index","Home")</li>
<li>@Html.ActionLink("Sobre","About","Home")</li>
<li>@Html.ActionLink("Contato","Contact","Home")</li>
</ul>
</div>
</div>
</div>
<divclass="containerbodycontent">
@RenderBody()
<hr/>
<footer>
<p>2015RenatoGroffe</p>
</footer>
</div>
<scriptsrc="~/lib/bootstrap/js/bootstrap.js"></script>
<scriptsrc="~/lib/hammer.js/hammer.js"></script>
<scriptsrc="~/lib/bootstraptouchcarousel/js/bootstraptouchcarousel.js"></script>
@RenderSection("scripts",required:false)
</body>
</html>

Injeo de dependncias e estruturas para a visualizao do

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

17/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

clima em cidades
Oacessosinformaesclimticasdascidadesindicadasnoarquivoconfig.jsonaconteratravs
doControllerCidadeController.EssaestruturapodesercriadapormeiodajanelaSolution
Explorer:clicarparaistocomobotodireitodomousesobreapastaControllers,selecionandoem
seguidanomenudeatalhoaopoAdde,finalmente,NewItem....Aparecerentoajanela
AddNewItemmarcarotemplateMVCControllerClass,preenchendoocampoNamecomo
valor"CidadeController".
OprximopassoserarealizaodeajustesnestenovoController(Listagem7):
UmatributoprivadobaseadonainterfaceIConfiguration(_configuration)precisarser
declaradonadefiniodotipoCidadeController,deformaapossibilitaroacessoaositensde
configuraodentrodesteController
UmconstrutortambmdeverserimplementadoparaaclasseCidadeController.Ser
atravsdessaestruturaqueomecanismodeinjeodeinjeodedependnciasirresolver
adependnciaparacomIConfiguration(oconstrutordeCidadeControllerserinvocado
automaticamentepelocontainerDI)
NaActionCidade1possvelobservarqueovalordeCidade1(nocaso,Seattle,US)est
sendoassociadopropriedadeViewBag,atravsdeumachamadaaomtodoGetda
instnciaassociadaaoatributo_configuration.Oacessoaumapropriedadedefinidano
arquivoconfig.jsonrequerousodocaracter:(doispontos),deformaasepararcadanvel
queantecedeaconfiguraoemquesto
JaActionCidade2servirdebaseparaaexibiodosdadosdacidadedeParis,
procedimentoesteaserdetalhadonasseesseguintes.
Listagem7.ControllerCidadeController
usingMicrosoft.AspNet.Mvc;
usingMicrosoft.Framework.ConfigurationModel;

namespaceTesteVS2015MVC.Controllers
{
publicclassCidadeController:Controller
{
privateIConfiguration_configuration;

publicCidadeController(IConfigurationconfig)
{
this._configuration=config;
}

publicIActionResultCidade1()
{
ViewBag.Cidade1=_configuration.Get("Teste:Cidade1");
returnView();
}

publicIActionResultCidade2()
{
returnView();
}

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

18/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

}
}

OBSERVAO:Maisadianteserodemonstradasasoutraspossibilidadesdeusodomecanismo
deinjeodedependnciasdoASP.NET5.
ParacriaraViewassociadaActionCidade1,criardentrodapastaViewsumanovasubpasta
chamadaCidade(comoindicadonaFigura10).OarquivoCidade1.cshtmlsergeradoneste
local,pormeiodautilizaodotemplateMVCViewPage,comomostraaFigura11.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

19/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura10.Estruturasparaavisualizaodeinformaesclimticas

Figura11.CriandoaViewCidade1.cshtml
OcdigoquedefineaViewCidade1.cshtmlestnaListagem8:
OViewComponentClimaCidadeseracionadoatravsdomtodoInvokedoobjeto
Component,recebendocomoparmetrosonomedocomponente,almdovalordacidade
queestassociadaViewBag.OHTMLproduzidoserentoincorporadoaocontedoda
Viewemquesto
OmtodoActionLinkdoobjetoHtmlirgeraraindaumlink,paraqueumusuriosejacapaz
deretornartelainicialdaaplicao.
Listagem8.ViewCidade1.cshtml(ControllerCidadeController)
<divstyle="width:100%;">
<center>
@Component.Invoke("ClimaCidade",ViewBag.Cidade1)
<br/>
@Html.ActionLink("Voltar","Index","Home")
</center>

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

20/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

</div>

Ativando o uso de Tag Helpers e mais injeo de dependncias


OutradasnovidadesdoMVC6apossibilidadedeusodasTagHelpersnolugardosHtmlHelpers
convencionais.AoinvsdeexigirumachamadaaummtodoauxiliarnocdigodeumaView,este
recursopermiteaobtenodomesmoresultadoapartirdautilizaodeumasintaxebaseadaem
tags(emummodosimilarqueleempregadocomHTMLpadro).
Atopresentemomento(inciodeMaro/2015)estenovomecanismonoseencontraativopor
defaultemprojetosMVC6.Diantedisto,fazsenecessriaainclusoderefernciasaoprojeto
Microsoft.AspNet.Mvc.TagHelpersemsoluesquevenhamadependerdesteltimo.Este
procedimentodeveserefetuadoatravsdoutilitrioNuGet,oqualpodeseracessadocomoboto
direitodomousesobreoitemReferencesdeumprojeto(Figura12).

Figura12.GerenciandoasdependnciasdoprojetoviaNuGet

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

21/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

NainterfacedaferramentaNuGetpesquisarporTagHelpers.Selecionaroprojeto
Microsoft.AspNet.Mvc.TagHelpers(Figura13),prosseguindocomainstalaodomesmo.Ao
trminodestespassos,serpossvelconstatarquearefernciafoidevidamenteincludana
aplicaodetestes(Figura14).

Figura13.GerenciandoasdependnciasdoprojetoviaNuGet

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

22/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura14.RefernciaparausodeTagHelpersjincludanaaplicaodetestes

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

23/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Oarquivo_ViewStart.cshtmltambmdeversermodificado,afimdetornarpossvelousodeTag
HelpersnasViewsdoprojetoTesteVS2015MVC.oquedemonstraaListagem9,naquala
diretiva@addtaghelperreferenciaonamespaceMicrosoft.AspNet.Mvc.TagHelpers.Talajustefar
comquemuitasdasfuncionalidadesdosHtmlHelpersqueintegramoframeworkMVCpossamser
acionadaspormeiodetagsnasViewsdaaplicaoaquiapresentada.
Listagem9.View_ViewStart.cshtml
@usingTesteVS2015MVC;
@addtaghelper"Microsoft.AspNet.Mvc.TagHelpers"
@{
Layout="/Views/Shared/_Layout.cshtml";
}

EmborapossuindofinalidadeidnticadaViewimplementadanaseoanterior,ocontedodo
arquivoCidade2.cshtml(Listagem10)apresentanovosdetalhesqueaindanoforamabordados
nesteartigo.Taisdiferenastmporobjetivodemonstrarousodomecanismodeinjeode
dependnciasedeTagHelpersemViews:
Ocdigoseiniciacomaclusula@usingreferenciandoonamespace
Microsoft.Framework.ConfigurationModel
Jaclusula@injectserutilizadapararesolveradependnciarepresentadapelavarivel
config,deformaqueseassocieaestarefernciaainstnciadotipoIConfigurationgerada
duranteainicializaodaaplicao
OViewComponentClimaCidadetambmseracionadoviamtodoInvoke,recebendocomo
parmetroovalorassociadoaoitemCidade2doarquivodeconfiguraes(equeobtidoa
partirdeumachamadaaomtodoGetdisponibilizadopeloobjetoconfig)
Ageraodeumlinkqueredirecionaousurioparaapginainicialdaaplicaotambm
acontecerdeumaoutramaneira,dispensandoassimanecessidadedeseefetuaruma
chamadaaomtodoActionLinkdoobjetoHtml.EstenovoexemplofazusodeumTagHelper,
noqualforamindicadosoControllereaActionaseremexecutados(pormeiodo
preenchimentodosatributosaspcontrollereaspaction,respectivamente).
Listagem10.ViewCidade2.cshtml(ControllerCidadeController)
@usingMicrosoft.Framework.ConfigurationModel
@injectIConfigurationconfig

<divstyle="width:100%;">
<center>
@Component.Invoke("ClimaCidade",config.Get("Teste:Cidade2"))
<br/>
<aaspcontroller="Home"aspaction="Index">Voltar</a>
</center>
</div>

Ajustes finais e ltimas consideraes sobre injeo de


dependncias

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

24/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

AclasseHomeControllertambmprecisarserajustada,sendoquenaListagem11estocdigo
esperadoparaessaestrutura:
EsteControllercontacomumapropriedadechamadaConfiguration,qualseratribuda
umainstnciadotipoIConfigurationviamecanismodeinjeodedependnciasdoASP.NET
5.ParaqueistoaconteaapropriedadeConfigurationfoimarcadacomoatributo
ActivateAttribute(namespaceMicrosoft.AspNet.Mvc)
AActionIndexfazusodapropriedadeConfiguration,demaneiraaassociarocontedodos
itensdeconfiguraoCidade1eCidade2apropriedadesdoobjetoViewBag.
Listagem11.ControllerHomeController
usingMicrosoft.AspNet.Mvc;
usingMicrosoft.Framework.ConfigurationModel;

namespaceTesteVS2015MVC.Controllers
{
publicclassHomeController:Controller
{
[Activate]
publicIConfigurationConfiguration{get;set;}

publicIActionResultIndex()
{
ViewBag.Cidade1=Configuration.Get("Teste:Cidade1");
ViewBag.Cidade2=Configuration.Get("Teste:Cidade2");

returnView();
}

...

}
}

Porfim,naListagem12estaimplementaodaViewIndex.Almdeconsumirosvalores
atribudosaoobjetoViewBagemHomeController,estearquivoaindafazusodeumHtmlHelpere
deumaTagViewparaageraodoslinksdevisualizaodoclimanascidadesdeSeattleeParis.
Listagem12.ViewIndex.cshtml(ControllerHomeController)
@{
stringcidade1=ViewBag.Cidade1;
}

<divclass="jumbotron">
<h1>ASP.NET5</h1>
<pclass="lead">
Exemplodeaplicaoconstrudacomo
frameworkASP.NETMVC6.
</p>
</div>

<divstyle="fontsize:20px;height:150px;">
Consultaainformaesclimticasselecioneumacidade:

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

25/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

<ul>
<li>
@Html.ActionLink(cidade1,"Cidade1","Cidade")
</li>
<li>
<aaspcontroller="Cidade"aspaction="Cidade2">
@ViewBag.Cidade2
</a>
</li>
</ul>
</div>

Teste da aplicao criada


NaFigura15apresentadaatelainicialdaaplicaoTesteVS2015MVC.

Figura15.TelainicialdaaplicaoTesteASPNETvNext
AoacionarolinkSeattle,USseroexibidasascondiesclimticasparaestacidadecomo
indicadonaFigura16.JavisualizaodasinformaessobreParisestnaFigura17.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

26/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Figura16.InformaesclimticasdacidadedeSeattle

Figura17.InformaesclimticasdacidadedeParis
AintenodesteartigofoidemonstrarosnovosrecursosparaaimplementaodeaplicaesMVC
noASP.NET5apartirdeumexemplosimples,masquecontemplasseasprincipaisnovidades
destaplataformaWeb.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

27/28

03/07/2015

VisualStudio2015:ImplementandoumaaplicaoASP.NETMVC6

Emboratenhamocorridograndesmudanas,inegvelqueoconhecimentoadquiridoemverses
anterioresdoASP.NETMVCaindacontinuarvlido.HmaisdeumanoaMicrosoftvem
trabalhandonesteprocessodereformulao,sendopossvelpressuporqueaindaem2015
acontecerolanamentodasnovasversesjestabilizadasdoVisualStudioedaplataforma
ASP.NET.
Esperoqueestecontedopossatersidotil.
Atumaprximaoportunidade!
Links
IntroducingASP.NET5
http://weblogs.asp.net/scottgu/introducingaspnet5
ItensdeconfiguraonoASP.NET5:oquemudouemrelaosversesanteriores?
http://www.tiselvagem.com.br/geral/itensconfiguracaoaspnet5/

RenatoJoseGroffe
Atuacomoconsultorematividadesvoltadasaodesenvolvimentodesoftwareshmaisde10anos.BacharelemSistemas
deInformao,comespecializaoemEngenhariadeSoftware.MicrosoftCertifiedTechnologySpecialist(Web,WCF,[...]

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=32265

28/28

Anda mungkin juga menyukai