PostSharpред рд╡рд┐рд▓рдВрдмрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛, рдЖрдкрдиреЗ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рд╣реИред рдФрд░ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рддрдм рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХрдо рд╕рдордп рд╣реИ рдФрд░ рдЖрдк рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрдм рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдирд╣реАрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡ рдСрдкрд░реЗрд╢рди рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдмрд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереА)ред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдПрдХ рд╣рд╛рде рдкрд░ рд╕рдорд╛рди рд╣реИ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл, рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдФрд░ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ IoC рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (WinForms, WebForms, ...)ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреЛрд╕реНрдЯрд╢рд╛рд░реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдХреНрдпреЛрдВ, рдЖрдк рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдПрдВрдЧреЗ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред


рддреЛ, рдЖрдк рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХрд┐рддрдиреА рдмрд╛рд░ рдЖрдП:

private IProductRepository _productRepository;
private IProductRepository ProductRepository
{
get
{
if (_productRepository == null )
{
_productRepository = new ProductRepository();
}
return _productRepository;
}
}

* This source code was highlighted with Source Code Highlighter .


рдЬрдмрдХрд┐ рд╕рдВрдкрддреНрддрд┐ IPropertyRepository рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЧреЗрдЯреНрдЯрд░ рдЕрднреА рднреА ProductReptyitory рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ "рдирдпрд╛ ProductRepository (") "new RevisedProductRepository ()" рдпрд╛ "New ProductRepository (2011)" "рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рд╣рд╛рде рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪреЗрдВрдЧреЗ-> рдмрджрд▓реЗрдВ, рдХреЙрдкреА-> рдкреЗрд╕реНрдЯ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЖрдк рд╕рднреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд╣реИ рдирд╛? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдПрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд▓рдЧрднрдЧ рд╣рд░ рд╕рджрд╕реНрдп рдХреЛ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ (рдЬрдм рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдФрд░, рдЪреВрдВрдХрд┐ рд╕рднреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЖрдо рд╣реИрдВ! рд╡реИрд╕реЗ рднреА, IoC рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:

private IProductRepository _productRepository;
private IProductRepository ProductRepository
{
get
{
if (_productRepository == null )
{
_productRepository = ObjectFactory.GetInstance<IProductRepository>();
}
return _productRepository;
}
}

* This source code was highlighted with Source Code Highlighter .


рдЕрдм, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА ObjectFactory рдирдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкрдиреА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╕рдордп рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рд╕рд┐рд░реНрдл "рдСрдмреНрдЬреЗрдХреНрдЯрдлреБрд▓" рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛ - рд╕реНрдЯреНрд░рдХреНрдЪреБрд░реЗрдк рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА IoC рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ)ред рдЕрдм рд╣рдорд╛рд░рд╛ рдХреЛрдб рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрд▓рдЯрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд╣реАрдВред
рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд▓реАрдирд░ рдмрди рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рднреА "рд╢реВрдиреНрдп" рдФрд░ рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд╛рдП рдЬрд╛рдПрдВрдЧреЗ (рдпрджрд┐ рд╣рдо рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрд╕реА IoC рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрджрд▓рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╡рд╣ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рд╣реИред рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдорд▓реНрдЯреА-рдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдмрди рдЧрдпрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди, рдкрд░рд┐рд╡рд░реНрддрди, рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ... рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЖрдЦрд┐рд░рдХрд╛рд░ PostSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

[LoadDependency] private IProductRepository _productRepository;

[ Serializable ]
public sealed class LoadDependencyAttribute : LocationInterceptionAspect
{
public override void OnGetValue(LocationInterceptionArgs args)
{
args.ProceedGetValue(); // fetches the field and populates the args.Value
if (args.Value == null )
{
var locationType = args.Location.LocationType;
var instantiation = ObjectFactory.GetInstance(locationType);

if (instantiation != null )
{
args.SetNewValue(instantiation);
}
args.ProceedGetValue();
}
}
}

* This source code was highlighted with Source Code Highlighter .


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЖрдк рдХреЗрд╡рд▓ "рд▓реЛрдбрдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкрд╣рд▓реА рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди IoC рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдмрд╛рдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЦреБрдж рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрд╛ рд╣реИ рдЬреЛ рдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧ, рдирд▓ рдЪреЗрдХ, рдереНрд░реЗрдб-рд╕реЗрдлреНрдЯреА, рдФрд░ рдЕрдиреНрдп рдмрджрд▓рд╛рд╡ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЕрдм рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗред
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рдЫреЛрдЯреЗ (рдХреЗрд╡рд▓ 19 рд▓рд╛рдЗрдиреЛрдВ) рдкрд╣рд▓реВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдб рдХреЛ 12 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдПрдХ рддрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд░рд░реНрдердХ рджреЛрд╣рд░рд╛рдП рдЧрдП рдХреЛрдб ( DRY ) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рд╣рд╛рд░реНрдб рдЗрдВрдЯрд░рдлреЗрд╕ ( DIP ) рдХреЗ рд╕рд╛рде рдХрдард┐рди рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рд╣рдо рдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ ( рдПрд╕рдЖрд░рдкреА ) рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдоред
рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдЕрдм, рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреНрдЮрд╛рдд рд╣реИрдВред рдпрд╣ рднреА рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдм рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП LocationInterceptionAspect рд╕реЗ CompileTimeInitialize рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм, рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрдЪреНрдЫрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Activator.CreateInstance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

[ Serializable ]
public sealed class LoadDependencyAttribute : LocationInterceptionAspect
{
private Type _type;

public override bool CompileTimeValidate(PostSharp.Reflection.LocationInfo locationInfo)
{
_type = DependencyMap.GetConcreteType(locationInfo.LocationType);
if (_type == null )
{
Message.Write(SeverityType.Error, "002" ,
"A concrete type was not found for {0}.{1}" ,
locationInfo.DeclaringType, locationInfo.Name);
return false ;
}
return true ;
}

public override void OnGetValue(LocationInterceptionArgs args)
{
args.ProceedGetValue();
if (args.Value == null )
{
form.LogListBox.Items.Add( "Instantiating UserService" );
args.SetNewValue(Activator.CreateInstance(_type));
args.ProceedGetValue();
}
}
}

* This source code was highlighted with Source Code Highlighter .


рдпрджрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдФрд░ рдЖрд╡реЗрджрди рдЪрд░рдг рдореЗрдВ рдирд╣реАрдВ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рдордЭрдиреЗ рд▓рдЧреЗ рд╣реИрдВ рдХрд┐ PostSharp рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред рдмреЗрд╢рдХ, рдореБрдЭреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ рд╣рд░ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИред
рдкрд░рд┐рдгрд╛рдореА рдкрд╣рд▓реВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реВ рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рд▓реЛрдбрдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдкрд╣рд▓реВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╡рд╣ рдлрд╝реАрд▓реНрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдХрдареЛрд░-рдХреВрдЯрдмрджреНрдз рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ! :) рддреЛ рдЪрд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдБрдЪреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

public override bool CompileTimeValidate(PostSharp.Reflection.LocationInfo locationInfo)
{
if (!locationInfo.LocationType.IsInterface)
{
Message.Write(SeverityType.Error, "001" ,
"LoadDependency can only be used on Interfaces in {0}.{1}" ,
locationInfo.DeclaringType, locationInfo.Name);
return false ;
}

_type = DependencyMap.GetConcreteType(locationInfo.LocationType);
if (_type == null )
{
Message.Write(SeverityType.Error, "002" ,
"A concrete type was not found for {0}.{1}" ,
locationInfo.DeclaringType, locationInfo.Name);
return false ;
}
return true ;
}

* This source code was highlighted with Source Code Highlighter .


рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП "рд▓реЛрдбрдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА" рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ:



рдЗрд╕рд▓рд┐рдП, рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╣рд▓реВ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдХрдард┐рди рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдФрд░ рдЕрдм, рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареЛрд╕ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд░рдгреЛрдВ рдореЗрдВ, рдмрд▓реНрдХрд┐ рд╕рдорд░реНрдерди рд╕реНрддрд░ рдкрд░ рднреАред

рдЕрдиреНрдп рдЕрдиреБрд╡рд╛рдж рдФрд░ рд▓рд┐рдВрдХ:

Source: https://habr.com/ru/post/In125098/


All Articles