рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗрд╡рд╛рд░рдд рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА (SRP - рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд) рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкреНрд░рдХрдЯреАрдХрд░рдг рд╣реИред рдмрд╣реБрдд рдмрд╛рд░, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛рд░реНрдп рдкреВрд░реЗ рдХреЛрдб рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднрд┐рдЧрдо рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рддрд░реНрдХ рдХреЗ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдмрдбрд╝реА рд╢реНрд░рдорд╢реАрд▓рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рддреНрдпрд╛рдкрди рднреА рд╣реИред рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдПред
рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдорддреМрд░ рдкрд░ рд╡рд╣ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдкреВрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рд╕реНрд╡рдпрдВ рдПрдХ рдкреГрд╖реНрда рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЯреЛрдХрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЛрдХрди рдХреА рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХрдорд╛рддреНрд░ рдХреЛрдб рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдРрд╕реЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП PostSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рд╛рдзрд┐рдХрд░рдг, PostSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдмрд╣реБрдд рдмрд╛рд░, рдХреЛрдИ рдпрд╣ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рддрд░реНрдХ рдкреВрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдмрд╣реБрдд рдзреБрдВрдзрд▓реЗ рд╣реИрдВред рдмрд╕ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, PostSharp рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЧрдВрджрдЧреА" рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрдердХ рдХреЛрдб рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрднреА-рдХрднреА рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддрд▓реЗ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЛ рдбреЗрдЯрд╛ рд╕рдВрдкрд╛рджрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВред рддреЛ, рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдХрд┐ рдПрдХ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ рдФрд░ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдкреЛрд╕реНрдЯрд╢рд╛рд░реНрдк рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЛрдЧреЛрдВ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрд░реЛрдз рднрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рджреЗрдВред рдпрд╣ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП WinForms рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдлрд╝реЙрд░реНрдо рднрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рд╣реЛрдЧрд╛ред рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдореИрдВ рдЦреБрдж рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рддрдХ рд╕реАрдорд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕рдВрдХреЗрддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕, рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
public class GovtFormService : IGovtFormService{ private static readonly IList _govtFormsDatabase = new List(); public GovtFormService() {
рдпрд╣рд╛рдВ, рд╣рдо рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЙрд░реНрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛ рд╕реЗ рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдВрддрддрдГ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред GetFormById рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХрдИ рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдПрдХ рдРрд╕рд╛ рдкрд╣рд▓реВ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдЬрдЧрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
[Serializable] public class AuthorizeReturnValueAttribute : OnMethodBoundaryAspect{ [NonSerialized] private IAuth Auth; public override void RuntimeInitialize(System.Reflection.MethodBase method) { Auth = new AuthService(); } public override void OnSuccess(MethodExecutionArgs args) { var singleForm = args.ReturnValue as GovtForm; if (singleForm != null) { if(Auth.CurrentUserHasPermission(singleForm, Permission.Read)) { MessageBox.Show( "You are not authorized to view the details of that form", "Authorization Denied!"); args.ReturnValue = null; } return; } } }
рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рд╡рд┐рдзрд┐ рдПрдХ GovtForm рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддреА рд╣реИред рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдЬрд╛рдБрдЪ рд▓реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рдкрддреНрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
I рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреИрд░-рдХреНрд░рдорд┐рдХ рдХреЗ рд░реВрдк
рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдУрд╡рд░рд░рд╛рдЗрдб RuntimeInitialize рдкрджреНрдзрддрд┐ рдореЗрдВ рдЖрд░рдВрднрд┐рдХ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк IoC рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рджреЗрдЦреЗрдВ)ред
рдкрд╣рд▓реВ рдореЗрдВ рдХреБрдЫ рдФрд░ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВ рдЬреЛ GovtForm рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЕрдиреБрд░реЛрдз рдлрд╝реЙрд░реНрдо рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВред
var formCollection = args.ReturnValue as IEnumerable; if (formCollection != null) { args.ReturnValue = formCollection .Where(f => Auth.CurrentUserHasPermission(f, Permission.Read)); return; }
рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕рд░рдХрд╛рд░ UserName рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, GovtForm рд╡рд░реНрдЧ рдЕрдЪреВрдХ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП ISecurable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрдм рдХрд░реЗрдВрдЯрдпреВрдЬрд╝рд░рд╣реИрд░реНрд╕рдкрд░реНрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдкреБрди: рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдПрдХрд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдпрд╛ рдЙрдирдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рдкрддреНрд░ рджреЗрдЦрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдпреВрдЖрдИ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдм рдЬрдм рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╣рд▓реБрдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдкрд╣рд▓реВ
рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд╣рд▓реВ рджреЛрдиреЛрдВ рд╣реИрдВред рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рддреЛ рдЖрдкрдХреЛ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд╣рд▓реВ рдХреИрд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ?
рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ:
- рдмреНрдпрд╛рдЬ рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд▓рд┐рдП ProvAspectRoleAttribute рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рднреВрдорд┐рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЖрдк PostSharp рд╕реНрдерд╛рди рд╕реЗ StandardRoles рдЧрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЬрд┐рд╕ рднреВрдорд┐рдХрд╛ рдкрд░ рд╡реЗ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реВ рдХреЗ рдкрд╣рд▓реВ рдкрд░ AspectRoleD dependencyAttribute рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдПрдЯреНрд░реАрдмреНрдпреВрдЯреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
[Serializable] [AspectRoleDependency(AspectDependencyAction.Order, AspectDependencyPosition.Before, StandardRoles.Caching)] public class AuthorizeReturnValueAttribute : OnMethodBoundaryAspect{ } [Serializable] [ProvideAspectRole(StandardRoles.Caching)] public class CachingAttribute : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionArgs args) {
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ PostSharp рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рдкрд╣рд▓реВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдордиреЗ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдХреИрд╢рд┐рдВрдЧ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд╣рд▓реВ рдХреЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд╣рд▓реВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ GetAllForms рдкрджреНрдзрддрд┐ рдХрд╛ рдХреЛрдб рджреЛрдиреЛрдВ рдкрд╣рд▓реБрдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛ (рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
public IEnumerable GetAllForms(){ MethodExecutionArgs CS$0$2__aspectArgs = new MethodExecutionArgs(null, null); <>z__Aspects.a1.OnEntry(CS$0$2__aspectArgs); IEnumerable CS$1$1__returnValue = _govtFormsDatabase; <>z__Aspects.a1.OnSuccess(CS$0$2__aspectArgs); CS$0$2__aspectArgs.ReturnValue = CS$1$1__returnValue; <>z__Aspects.a0.OnSuccess(CS$0$2__aspectArgs); return (IEnumerable) CS$0$2__aspectArgs.ReturnValue; }
рдФрд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдХреЛрдб, рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ рдФрд░ AspectD dependencyPosition рдХреЛ рдкрд╣рд▓реЗ рдмрджрд▓реЗрдВ:
public IEnumerable GetAllForms(){ <>z__Aspects.a1.OnEntry(null); MethodExecutionArgs CS$0$2__aspectArgs = new MethodExecutionArgs(null, null); IEnumerable CS$1$1__returnValue = _govtFormsDatabase; CS$0$2__aspectArgs.ReturnValue = CS$1$1__returnValue; <>z__Aspects.a0.OnSuccess(CS$0$2__aspectArgs); CS$1$1__returnValue = (IEnumerable) CS$0$2__aspectArgs.ReturnValue; <>z__Aspects.a1.OnSuccess(null); return CS$1$1__returnValue; }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ a1 (рдХреИрд╢рд┐рдВрдЧ) рдФрд░ a0 (рдкреНрд░рд╛рдзрд┐рдХрд░рдг) рд╕реНрд╡реИрдк рдХрд┐рдП рдЧрдП рд╣реИрдВред
PostSharp рдкрд╣рд▓реВ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рдХреНрд░рд┐рдпрд╛рдПрдВ: рдХрдореНрдпреВрдЯ, рд╕рдВрдШрд░реНрд╖, рдЖрджреЗрд╢, рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рдХреЛрдИ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рдЖрдк StandardRoles рдЧрдгрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рдордп рдЖрдиреЗ рдкрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЖрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдХрд░ рдХрд┐ рдЯреАрдо рдХрд╛ рд╕рдмрд╕реЗ рдирдпрд╛ рд╕рджрд╕реНрдп рднреА рдпреВрдЖрдИ рдкрд░ рдбреЗрдЯрд╛ рдирд╣реАрдВ рджреЗрдЧрд╛, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдХреЛрдб рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдореИрдереНрдпреВ рдбреАред рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЧреНрд░реВрд╡реНрд╕ рдмрддрд╛рдиреЗ рд╡рд╛рд▓рд╛ ред рдЙрдирдХрд╛ рдмреНрд▓реЙрдЧ mgroves рд╣реИ ред com редPostSharp :
рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдСрдбрд┐рдЯрд┐рдВрдЧ ,
рдХреИрд╢рд┐рдВрдЧ ,
рд╡рд┐рд▓рдВрдмрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рд▓реЛрдбрд┐рдВрдЧ ред