SlideShare a Scribd company logo
Generazione dinamica di codice .NET 2.0 Ricci Gian Maria [email_address] MarCamp : 24 febbraio 2007
Codice che genera codice     Un programma genera codice a run-time durante la sua esecuzione Un programma così strutturato deve necessariamente essere strutturato per essere estensibile. Supporto nativo dell’ambiente alla generazione ed al caricamento dinamico di codice Generazione dinamica di codice
Non si conosce a priori il “tipo” di dato su cui si lavora  Creare interfacce come punti di collegamento per l’estendibilità Utilizzare classi base con metodi virtuali per incapsulare le funzionalità base Accedere ai nuovi tipi con indentificazione run-time (reflection) Strutturare le modalità di caricamento  Single AppDomain Multi AppDomain Come strutturare il progetto
Comunicare per interfacce Core Interfaccia Tipo  dinamico Tipo  dinamico Tipo  dinamico
Comunicare per classi base Core Base Tipo  dinamico Tipo  dinamico Tipo  dinamico
Comunicare per reflection Core Tipo  dinamico Informazioni sul tipo Invocazione dinamica
Creazione classi proxy di classi reali Intercettare le chiamate ai metodi per trovare metriche di codice Aspect Oriented Programming Necessità specifiche es: NHibernate lazy load  Mock object Creare oggetti che simulano classi reali Generazione runtime proxy a servizi  E’ affascinante   Perchè generare codice dinamicamente
Generazione in .NET 2.0 Una prima possibilità consiste nel generare dinamicamente un file di testo contenente codice C#, VB, etc.. e poi chiamare direttamente il compilatore generando così una dll che può essere caricata runtime. Vantaggi Estrema semplicità Svantaggi Possibilità di errore nella generazione di file Scarso controllo degli errori
Generazione tramite compilatore Core C# sc.exe dll
Utilizzare il CodeDom Una possibilità migliore consiste nella generazione di codice tramite le classi contenute nel namespace CodeDom. Grazie a questa libreria è possibile controllare in dettaglio come verranno generati i tipi dinamici. Dim cg As ICodeGenerator = _ New CSharpCodeProvider().CreateGenerator()   Vantaggi Controllo accurato sul codice generato Impossibiltà di generazione di errori di sintassi Utile per generatori di codice Svantaggi Generazione di codice complessa
Generazione tramite CodeDom Core dll CodeDom
Reflection.Emit() L’ultima possibilità offerta dal .NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Sostanzialmente tramite Emit si possono ottenere gli stessi risultati che si possono ottenere tramite CodeDom, ma si hanno dei vantaggi. Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per una classe compilatore Estrema facilità di utilizzo a patto di conoscere MSIL Possibilità di generare nuovi tipi in ogni momento, l’assembly generato dinamicamente non è chiuso.
Generazione tramite Reflectio.Emit() Core Emit
Reflection.Emit() L’ultima possibilità offerta dal .NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Vantaggi Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per la compilazione Maggiore performance Possibilità di generare nuovi tipi in ogni momento  Svantaggi Richiesta buona conoscenza di MSIL
Abstract View
Domande?

More Related Content

What's hot (20)

PDF
Blazor: are we ready for the launch?
Andrea Agnoletto
 
PDF
ASP.NET Core - Razor Pages
Andrea Dottor
 
PPTX
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
PDF
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
PPTX
Frontend Development with Blazor
Michele Aponte
 
PPTX
Alessandro Forte - ASP.Net 4.0
Alessandro Forte
 
PDF
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
PPTX
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
PPTX
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Codemotion
 
PPTX
Selenium e testing web - di Alessio Benedetti
Giuneco S.r.l
 
PPTX
ASP.NET performance optimization
Andrea Dottor
 
PPTX
Silverlight 4 - Community Tour (RTM)
XeDotNet
 
PDF
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
PPTX
Integrazione con Visual Studio Online
Davide Benvegnù
 
PPTX
Christmas greetings cards with blazor
Nicolò Carandini
 
PPTX
Blazor Focus Week Bari
Michele Aponte
 
PPTX
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Andrea Dottor
 
PPT
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
PDF
Applicazioni Web ultra-performanti con Vue.js e Delphi
Marco Breveglieri
 
PPTX
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
Blazor: are we ready for the launch?
Andrea Agnoletto
 
ASP.NET Core - Razor Pages
Andrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Frontend Development with Blazor
Michele Aponte
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte
 
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Codemotion
 
Selenium e testing web - di Alessio Benedetti
Giuneco S.r.l
 
ASP.NET performance optimization
Andrea Dottor
 
Silverlight 4 - Community Tour (RTM)
XeDotNet
 
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
Integrazione con Visual Studio Online
Davide Benvegnù
 
Christmas greetings cards with blazor
Nicolò Carandini
 
Blazor Focus Week Bari
Michele Aponte
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Andrea Dottor
 
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Marco Breveglieri
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 

Viewers also liked (20)

PPTX
Brokering over WCF @ dotNetMarche
Mauro Servienti
 
PPTX
Deep diving C# 4 (Raffaele Rialdi)
DotNetMarche
 
PDF
Tutte le novità di ASP.NET MVC3
Manuel Scapolan
 
PDF
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
guesta10af3
 
PPTX
C# 3.0 e LINQ
Andrea Angella
 
PPTX
le novità di C# 6
Antonio Pelleriti
 
PPTX
Linq ed oltre
Gian Maria Ricci
 
PPTX
Data binding for dummies - Microsoft publish 2014
Luca Di Fino
 
PPTX
TFS - Quale source control
Gian Maria Ricci
 
PPTX
Windows 10 app design
Luca Di Fino
 
PDF
Dai delegati a LINQ con C#
Manuel Scapolan
 
PDF
Managed Extensibility Framework (MEF)
Manuel Scapolan
 
PDF
Knockout.js
Manuel Scapolan
 
PDF
Domain Driven Design e CQRS
Manuel Scapolan
 
PPTX
Model-View-ViewModel
DotNetMarche
 
PDF
Usare le nuove WCF Web Api per creare servizi RESTful
Luca Milan
 
PDF
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
DotNetCampus
 
PPT
WPF
gioele5
 
PPTX
WPF basics
DotNetMarche
 
PPTX
Silverlight m v-vm @ DotNetteria
Mauro Servienti
 
Brokering over WCF @ dotNetMarche
Mauro Servienti
 
Deep diving C# 4 (Raffaele Rialdi)
DotNetMarche
 
Tutte le novità di ASP.NET MVC3
Manuel Scapolan
 
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
guesta10af3
 
C# 3.0 e LINQ
Andrea Angella
 
le novità di C# 6
Antonio Pelleriti
 
Linq ed oltre
Gian Maria Ricci
 
Data binding for dummies - Microsoft publish 2014
Luca Di Fino
 
TFS - Quale source control
Gian Maria Ricci
 
Windows 10 app design
Luca Di Fino
 
Dai delegati a LINQ con C#
Manuel Scapolan
 
Managed Extensibility Framework (MEF)
Manuel Scapolan
 
Knockout.js
Manuel Scapolan
 
Domain Driven Design e CQRS
Manuel Scapolan
 
Model-View-ViewModel
DotNetMarche
 
Usare le nuove WCF Web Api per creare servizi RESTful
Luca Milan
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
DotNetCampus
 
WPF
gioele5
 
WPF basics
DotNetMarche
 
Silverlight m v-vm @ DotNetteria
Mauro Servienti
 
Ad

Similar to Generazione Dinamica di Codice in .NET (20)

PPTX
XeDotNet - Source Generator
Marco Bortolin
 
PDF
Wasm and Blazor CDays keynote
Nicolò Carandini
 
PPTX
.Net 4.0 Preview @ UGIdotNet
Mauro Servienti
 
PPT
Build Automation Tips
Carlo Bonamico
 
PPTX
Novità di Asp.Net 4.0
Gian Maria Ricci
 
PDF
Costruire un client .NET per SugarCRM
Antonio Musarra
 
PPTX
Lavorare con applicazioni Brownfield: il caso di 39x27.com
Simone Chiaretta
 
PPTX
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
 
PDF
Continuous Integration e High Quality Code
Daniele Mondello
 
PDF
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
PDF
Lucidi relativi al DVD di Programmazione in C
Fulvio Corno
 
PDF
Presentazione CERT-CHECK
Sergio Shevchenko
 
PPTX
INTRO TO XAMARIN
DotNetCampus
 
PPT
Vb.Net
Maurizio Farina
 
PDF
Xamarin & Cognitive Services Slides
Francesco Bonacci
 
PPTX
.NET & Linux: la strana coppia - DotNetDay 2018
Fabrizio Bernabei
 
PPTX
Meetup ASP.NET Core Angular
dotnetcode
 
PDF
Hands on MVC - Mastering the Web
Claudio Gandelli
 
PPTX
Xamarin
Fabio Cozzolino
 
PDF
Malware Analysis. A Case Study
Gianni Amato
 
XeDotNet - Source Generator
Marco Bortolin
 
Wasm and Blazor CDays keynote
Nicolò Carandini
 
.Net 4.0 Preview @ UGIdotNet
Mauro Servienti
 
Build Automation Tips
Carlo Bonamico
 
Novità di Asp.Net 4.0
Gian Maria Ricci
 
Costruire un client .NET per SugarCRM
Antonio Musarra
 
Lavorare con applicazioni Brownfield: il caso di 39x27.com
Simone Chiaretta
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
 
Continuous Integration e High Quality Code
Daniele Mondello
 
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
Lucidi relativi al DVD di Programmazione in C
Fulvio Corno
 
Presentazione CERT-CHECK
Sergio Shevchenko
 
INTRO TO XAMARIN
DotNetCampus
 
Xamarin & Cognitive Services Slides
Francesco Bonacci
 
.NET & Linux: la strana coppia - DotNetDay 2018
Fabrizio Bernabei
 
Meetup ASP.NET Core Angular
dotnetcode
 
Hands on MVC - Mastering the Web
Claudio Gandelli
 
Malware Analysis. A Case Study
Gianni Amato
 
Ad

More from Stefano Ottaviani (10)

PDF
Accessibility Days: esperienze e condivisioni per l'accessibilità
Stefano Ottaviani
 
PDF
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Stefano Ottaviani
 
PDF
Introduzione allo Unit Testing
Stefano Ottaviani
 
PDF
Le meta-community: quando l'unione fa la forza
Stefano Ottaviani
 
PPTX
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Stefano Ottaviani
 
PDF
Un anno di DevMarche
Stefano Ottaviani
 
PPTX
Mobile e Smart Client
Stefano Ottaviani
 
PDF
Save ourselves with unit testing :)
Stefano Ottaviani
 
PDF
MonoTouch, un anno dopo
Stefano Ottaviani
 
PDF
Programmiamo iPhone e iPad (e non solo!) con MonoTouch
Stefano Ottaviani
 
Accessibility Days: esperienze e condivisioni per l'accessibilità
Stefano Ottaviani
 
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Stefano Ottaviani
 
Introduzione allo Unit Testing
Stefano Ottaviani
 
Le meta-community: quando l'unione fa la forza
Stefano Ottaviani
 
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Stefano Ottaviani
 
Un anno di DevMarche
Stefano Ottaviani
 
Mobile e Smart Client
Stefano Ottaviani
 
Save ourselves with unit testing :)
Stefano Ottaviani
 
MonoTouch, un anno dopo
Stefano Ottaviani
 
Programmiamo iPhone e iPad (e non solo!) con MonoTouch
Stefano Ottaviani
 

Generazione Dinamica di Codice in .NET

  • 1. Generazione dinamica di codice .NET 2.0 Ricci Gian Maria [email_address] MarCamp : 24 febbraio 2007
  • 2. Codice che genera codice  Un programma genera codice a run-time durante la sua esecuzione Un programma così strutturato deve necessariamente essere strutturato per essere estensibile. Supporto nativo dell’ambiente alla generazione ed al caricamento dinamico di codice Generazione dinamica di codice
  • 3. Non si conosce a priori il “tipo” di dato su cui si lavora Creare interfacce come punti di collegamento per l’estendibilità Utilizzare classi base con metodi virtuali per incapsulare le funzionalità base Accedere ai nuovi tipi con indentificazione run-time (reflection) Strutturare le modalità di caricamento Single AppDomain Multi AppDomain Come strutturare il progetto
  • 4. Comunicare per interfacce Core Interfaccia Tipo dinamico Tipo dinamico Tipo dinamico
  • 5. Comunicare per classi base Core Base Tipo dinamico Tipo dinamico Tipo dinamico
  • 6. Comunicare per reflection Core Tipo dinamico Informazioni sul tipo Invocazione dinamica
  • 7. Creazione classi proxy di classi reali Intercettare le chiamate ai metodi per trovare metriche di codice Aspect Oriented Programming Necessità specifiche es: NHibernate lazy load Mock object Creare oggetti che simulano classi reali Generazione runtime proxy a servizi E’ affascinante  Perchè generare codice dinamicamente
  • 8. Generazione in .NET 2.0 Una prima possibilità consiste nel generare dinamicamente un file di testo contenente codice C#, VB, etc.. e poi chiamare direttamente il compilatore generando così una dll che può essere caricata runtime. Vantaggi Estrema semplicità Svantaggi Possibilità di errore nella generazione di file Scarso controllo degli errori
  • 9. Generazione tramite compilatore Core C# sc.exe dll
  • 10. Utilizzare il CodeDom Una possibilità migliore consiste nella generazione di codice tramite le classi contenute nel namespace CodeDom. Grazie a questa libreria è possibile controllare in dettaglio come verranno generati i tipi dinamici. Dim cg As ICodeGenerator = _ New CSharpCodeProvider().CreateGenerator() Vantaggi Controllo accurato sul codice generato Impossibiltà di generazione di errori di sintassi Utile per generatori di codice Svantaggi Generazione di codice complessa
  • 11. Generazione tramite CodeDom Core dll CodeDom
  • 12. Reflection.Emit() L’ultima possibilità offerta dal .NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Sostanzialmente tramite Emit si possono ottenere gli stessi risultati che si possono ottenere tramite CodeDom, ma si hanno dei vantaggi. Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per una classe compilatore Estrema facilità di utilizzo a patto di conoscere MSIL Possibilità di generare nuovi tipi in ogni momento, l’assembly generato dinamicamente non è chiuso.
  • 14. Reflection.Emit() L’ultima possibilità offerta dal .NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Vantaggi Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per la compilazione Maggiore performance Possibilità di generare nuovi tipi in ogni momento Svantaggi Richiesta buona conoscenza di MSIL