SlideShare a Scribd company logo
1 of 22
29ª Reunião Lisboa - 26/05/2012      http://netponto.org




                                  AOP - Postsharp
                                          Vítor Paulino
Patrocinador “GOLD”
Patrocinadores “Silver”
Vítor Paulino
Consultor Novabase
      .NET Developer
Senior developer IBT
       .NET Developer
Agenda
•   AOP
•   Caracteristicas Postsharp
•   Demo - Taking a tour
•   Aspectos
•   Lifetime & scope
•   Demos
AOP

“ In computing, aspect-oriented programming (AOP) is
a programming paradigm which aims to increase modularity by
allowing the separation of cross-cutting concerns. “
                                                wikipedia
AOP Conceitos
PostSharp - Aspectos
• Aspectos Base
• Aspectos Multicast
• Aspectos Providers
Aspectos Base
• AssemblyLevelAspect
  – classe base para todos os aspectos aplicados a assemblies
• TypeLevelAspect
  – classe base para todos os aspectos aplicados a tipos
• MethodLevelAspect
  – classe base para todos os aspectos aplicados a métodos
• LocationLevelAspect
  – Classe base de todos os aspectos aplicados a campos ou
    parâmetros de métodos
• EventLevelAspect
  – classe base para todos os aspectos aplicados a eventos
Aspectos Multicast
 – MulticastAttributes:
    •   visibility,
    •   virtuality,
    •   implementation,
    •   scope.
 – AttributeTargetTypes:
    • Nome Completo
    • Wildmask
    • RegularExpressions
 – AttributePriority : Valor da prioridade de aplicação do
   aspecto, quanto mais baixo o valor mais prioritário
Aspectos Providers
• IAspectProvider
 –Aplicação de aspectos
  programaticamente
 • CustomAttributeIntroductionAspect
• Demo 1
 Postsharp – Taking a tour
Pós-Compilação
           MSIL Injection


                                  CompileTimeInitialize
       Inicialização em compile
                  time            CompileTimeValidate




                                     RunTimeInitialize
       Inicialização em runtime
Pós-Compilação
1. Obter a metadata do módulo.
2. Traduzir as instruções IL para um formato
   relevante para o processo de weave
   conseguir interpretar.
3. Detectar os Joinpoints ( code weaver task ).
4. Tratamento explicito para os Aspectos
   associados ao tratamento de excepções.
5. Injectar as instruções IL dos advices.
6. Voltar a compilar de novo o modulo.
Tempo de vida
                                     Tempo de vida igual ao da aplicação
 Static Scoped Aspect
                                     Por Default !
                  At Compile Time




                                     Tempo de vida igual ao da instância
 Instance Scoped Aspect
                                     alvo
                        At runtime   • IInstanceScopedAspect
                                     •InstanceLevelAspect
• Demo
Lifetime & Scope
Conclusões
• Agnostico à linguagem de programação
• MSIL Injection
• Facil utilização
• Aplicação a todos os tipos de join
  points do .NET
• Codigo gerado – dificil leitura
Referências
Site do Postsharp
   – http://www.sharpcrafters.com/postsharp/documentation
Patrocinador “GOLD”
Patrocinadores “Silver”
Próximas reuniões presenciais
• 26-05-2012 – Maio
• 02-06-2012 – Junho (Coimbra)
• 16-06-2012 – Junho
• 21-07-2012 – Julho

Reserva estes dias na agenda! :)
Obrigado!
Vítor Paulino
vmlepaulino@gmail.com

More Related Content

Similar to Aspect-oriented Programming (AOP) com PostSharp

Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosThiago Pereira
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoLorival Smolski Chapuis
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Fernando Henrique
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...Amazon Web Services
 
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisMichel Graciano
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...Rogério Moraes de Carvalho
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesC. Augusto Proiete
 
Visual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NETVisual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NETFernando Henrique
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Elaine Cecília Gatto
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwarejamersonlima
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesGuilherme Vierno
 

Similar to Aspect-oriented Programming (AOP) com PostSharp (20)

Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
347842.ppt
347842.ppt347842.ppt
347842.ppt
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviços
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0
 
Rational Unfied Process
Rational Unfied ProcessRational Unfied Process
Rational Unfied Process
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
 
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidades
 
Visual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NETVisual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NET
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluções
 

More from Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Comunidade NetPonto
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaComunidade NetPonto
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Comunidade NetPonto
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariComunidade NetPonto
 

More from Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto Ferrari
 

Aspect-oriented Programming (AOP) com PostSharp

  • 1. 29ª Reunião Lisboa - 26/05/2012 http://netponto.org AOP - Postsharp Vítor Paulino
  • 4. Vítor Paulino Consultor Novabase .NET Developer Senior developer IBT .NET Developer
  • 5. Agenda • AOP • Caracteristicas Postsharp • Demo - Taking a tour • Aspectos • Lifetime & scope • Demos
  • 6. AOP “ In computing, aspect-oriented programming (AOP) is a programming paradigm which aims to increase modularity by allowing the separation of cross-cutting concerns. “ wikipedia
  • 8. PostSharp - Aspectos • Aspectos Base • Aspectos Multicast • Aspectos Providers
  • 9. Aspectos Base • AssemblyLevelAspect – classe base para todos os aspectos aplicados a assemblies • TypeLevelAspect – classe base para todos os aspectos aplicados a tipos • MethodLevelAspect – classe base para todos os aspectos aplicados a métodos • LocationLevelAspect – Classe base de todos os aspectos aplicados a campos ou parâmetros de métodos • EventLevelAspect – classe base para todos os aspectos aplicados a eventos
  • 10. Aspectos Multicast – MulticastAttributes: • visibility, • virtuality, • implementation, • scope. – AttributeTargetTypes: • Nome Completo • Wildmask • RegularExpressions – AttributePriority : Valor da prioridade de aplicação do aspecto, quanto mais baixo o valor mais prioritário
  • 11. Aspectos Providers • IAspectProvider –Aplicação de aspectos programaticamente • CustomAttributeIntroductionAspect
  • 12. • Demo 1 Postsharp – Taking a tour
  • 13. Pós-Compilação MSIL Injection CompileTimeInitialize Inicialização em compile time CompileTimeValidate RunTimeInitialize Inicialização em runtime
  • 14. Pós-Compilação 1. Obter a metadata do módulo. 2. Traduzir as instruções IL para um formato relevante para o processo de weave conseguir interpretar. 3. Detectar os Joinpoints ( code weaver task ). 4. Tratamento explicito para os Aspectos associados ao tratamento de excepções. 5. Injectar as instruções IL dos advices. 6. Voltar a compilar de novo o modulo.
  • 15. Tempo de vida Tempo de vida igual ao da aplicação Static Scoped Aspect Por Default ! At Compile Time Tempo de vida igual ao da instância Instance Scoped Aspect alvo At runtime • IInstanceScopedAspect •InstanceLevelAspect
  • 17. Conclusões • Agnostico à linguagem de programação • MSIL Injection • Facil utilização • Aplicação a todos os tipos de join points do .NET • Codigo gerado – dificil leitura
  • 18. Referências Site do Postsharp – http://www.sharpcrafters.com/postsharp/documentation
  • 21. Próximas reuniões presenciais • 26-05-2012 – Maio • 02-06-2012 – Junho (Coimbra) • 16-06-2012 – Junho • 21-07-2012 – Julho Reserva estes dias na agenda! :)

Editor's Notes

  1. separation o cross cutting concernsaspectadvice PointcutJoinpointsweavingAspect: definição do aspectAdvice: definição do que é que se pretende executarJoinpoints: locais onde se injecta o codigo do advice do aspectoPointcut: joinpoints[]
  2. Adicionar o aspecto ao assembly e ver a aplicação a estoirar ! Stack overflow !! We can't build the project because PostSharp is trying to apply our aspect to our aspect. The result of this, at least in this case, would be a stack overflowAttributeTargetTypes ( string onde se preenche o nomecompleto to tipo )
  3. [MulticastAttributeUsage(MulticastTargets.Field | MulticastTargets.Property, TargetMemberAttributes = MulticastAttributes.Public | MulticastAttributes.Instance)] public sealed class AddXmlIgnoreAttribute : MethodLevelAspect, IAspectProvider{ private static readonlyCustomAttributeIntroductionAspectcustomAttributeIntroductionAspect = new CustomAttributeIntroductionAspect( new ObjectConstruction(typeof(XmlIgnoreAttribute).GetConstructor(Type.EmptyTypes))); public IEnumerable<AspectInstance> ProvideAspects(object targetElement) { MemberInfomemberInfo = (MemberInfo)targetElement; if (memberInfo.IsDefined(typeof(XmlElementAttribute), false) || memberInfo.IsDefined(typeof(XmlAttributeAttribute), false)) yield break; yield return new AspectInstance(targetElement, customAttributeIntroductionAspect); }}
  4. Referenciar um projecto com postsharpMostrar o assembly e espaço de nomesCriar um aspecto OnMethodBoundoryAspectMostrar os métodos que podemos fazer overrideParametrosCompilar – Alertar para o popup do executavel que fez as coisas... Mostrar o ILSpy
  5. Compile time weavingLet the standard compiler do its job, then read the compiled assembly, modify it and write it back. This is the approach of PostSharp.msBuild: MSBUILD: Este ficheiro : C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Microsoft.Common.targetsDa indicação que deve ser carregado o ficheiro :  c:\\Program Files\\MSBuild\\v2.0\\Custom.After.Microsoft.Common.targetsFicheiro este que é alterado pelos executaveis que pretendem executar tarefas após o build. O Post sharp edita-o com a informação das tarefas a executar após o build
  6. Para os aspectos normais : Aspect for each targetPara os aspectos que implementem IInstanceScopedAspect,Return this.MemberwiseClone()nainvocação do CreateInstance(AdviceArgsadviceArgs) da interface IInstanceScopedAspect
  7. The reasons why I chose post-compilation when designing PostSharp 5 years ago are:Language agnosticism.MSIL has stabler specifications compared to high-level languages (which have non-trivial updates every second year).Most of the time, MSIL is the level of abstraction you need when dealing with aspects. You don't need to know all the equivalent constructs (think f 'using' and 'try-finally').Before 2008, nobody has succeeded in producing a decent C# compiler. The difficulties met by Mono were impressive enough, even if they have caught up now.Dealing with binary seemed much faster than dealing with source code.Dealing with a binary assembly makes it possible to execute it -- the assembly being processed can transforme itself. It was unheard before PostSharp Laos was first released.