2012-11-07 7 views
14

sto avvolgendo chiamate ad un'API e la maggior parte dei miei metodi hanno nelle loro prime righe:C'è qualcosa come decoratori pitone per C#?

if (!Gree.Authorizer.IsAuthorized()) 
{ 
    return; 
} 

in Python vorrei decorare questi metodi con qualcosa di simile @login_required.

Cosa si utilizzerà per il refactoring di quel tipo di logica in c#?

risposta

6

Si sta cercando un sottoinsieme di una metodologia di programmazione più generale denominata Aspect Oriented Programming.

C# sembra supportarlo attraverso diverse librerie e uno può anche implementare il proprio, grazie ad alcune delle funzionalità CLR. Vedi Aspect Oriented Programming using .NET che copre i suoi principi di base (sto collegando la parte dell'articolo parlando delle specifiche di C#, ma il resto è ugualmente interessante se stai cercando soluzioni già pronte come PostSharp, come menzionato in un'altra risposta).

+0

Grazie per il link. Controllerò se funziona con 'Unity3d'. – Macarse

4

È possibile utilizzare qualsiasi strumento AOP per C# come ad esempio this.

Con PostSharp, gli sviluppatori di software possono incapsulare implementazione modelli in classi chiamate aspetti, e applicare questi aspetti al loro codice utilizzando attributi personalizzati.

+0

PostSharp è un '.exe'. Voglio che qualcosa lo usi da 'Unity3d' che usa Mono. – Macarse

2

Non ho familiarità con Python ma sembra che tu stia cercando "attributi" (MSDN), (che sono piuttosto simili alle annotazioni Java).

In particolare, .NET fornisce "AuthorizeAttribute", che fa esattamente ciò che si desidera (e forse un po 'di più). Anche se non si è sotto .NET, ciò potrebbe far luce nell'attuazione che si sta tentando di ottenere.

+2

'attributes' sono solo metadati associati alla classe/metodo ecc e non fanno nulla da soli. È necessario utilizzare un altro strumento che legge questi metadati usando la riflessione e fa le cose richieste, che è ciò che fanno tutti gli strumenti AOP – Ankur