рдорд╛рдиреНрдп ASP.NET рдХреЛрд░

рдорд╛рдиреНрдп ASP.NET рдХреЛрд░


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "24 рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕реА + +" рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреБрд╕реНрддрдХ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ ASP.NET рдХреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдпрджрд┐ рдЖрдкрдиреЗ .NET рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ IoC, DI, DIP, рдЗрдиреНрдЯреНрд░рд┐рдкреНрдЯрд░реНрд╕, рдорд┐рдбрд▓рд╡реЗрдпрд░, рдлрд┐рд▓реНрдЯрд░реНрд╕ (рдпрд╛рдиреА, рд╕рдм рдХреБрдЫ рдЬреЛ рдХрд┐ рдХреНрд▓рд╛рд╕рд┐рдХ .NET рд╕реЗ рдЕрд▓рдЧ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "Read more" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд╕рдордЭреЗ рдмрд┐рдирд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред


рдЖрдИрдУрд╕реА, рдбреАрдЖрдИ, рдбреАрдЖрдИрдкреА


рдпрджрд┐ рдПрдХ рдерд┐рдПрдЯрд░ рдПрдХ рд╣реИрдВрдЧрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ ASP.NET рдХреЛрд░ рдПрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред DI рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ IoC рдХреНрдпрд╛ рд╣реИред


IoC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдПрдХ рдЕрдХреНрд╕рд░ "рд╣рдореЗрдВ рдХреЙрд▓ рди рдХрд░реЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ" рдХреЗ рд╣реЙрд▓реАрд╡реБрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╣рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЖрдкрдХреЛ рдЦреБрдж рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред"


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


рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдИрдУрд╕реА рдХреЛ рджреЗрдЦреЗрдВред


рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рд░рд▓ рд╡рд░реНрдЧ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:


class ConsoleLayer : ILayer { public void Write(string text) { Console.WriteLine(text); } } class DebugLayer : ILayer { public void Write(string text) { Debug.WriteLine(text); } } interface ILayer { void Write(string text); } 

рд╡реЗ рджреЛрдиреЛрдВ рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ)ред


рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБ рд╣реИ:


  class Logging : ILayer { private ILayer _instance; public Logging(int i) { if (i == 1) { _instance = new ConsoleLayer(); } else { _instance = new DebugLayer(); } } public void Write(string text) { _instance.Write(text); } } 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, _instance рд╡реИрд░рд┐рдПрдмрд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдЖрдЧреЗ, рд▓рд┐рдЦрдиреЗ рдкрд░ рдХреЙрд▓, рдХрдВрд╕реЛрд▓ рдпрд╛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐, рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ


рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБрдПрдБ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреА рд╣реИрдВред рд╡реЗ рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рд╕рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, ILayer рдПрдХ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ


  static void Main(string[] args) { var log = new Logging(1); log.Write("Hello!"); Console.Read(); } 

1 рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ, рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЙрдЧ.рдмрд╛рдЗрдЯ рдбреАрдмрдЧ рдореЗрдВ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ред рд╕рдм рдХреБрдЫ, рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБ рдореБрдЦреНрдп рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБ рдХреЗ рдХреЛрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ - рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ред рдпрджрд┐ рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдПрдХ рд╡реНрдпреБрддреНрдХреНрд░рдо рдмрдирд╛рдпреЗрдВрдЧреЗ - рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдоред рдЖрдЗрдП рдореЗрди рдХреНрд▓рд╛рд╕ рдХрдВрдЯреНрд░реЛрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ рд╡рд░реНрдЧ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдПрдХ рд╢реНрд░реЗрдгреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ ILayer рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ


  class Logging { private ILayer _instance; public Logging(ILayer instance) { _instance = instance; } public void Write(string text) { _instance.Write(text); } } 

рдФрд░ рдЕрдм, рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


  static void Main(string[] args) { var log = new Logging(new DebugLayer()); log.Write("Hello!"); Console.Read(); } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБ рд╕реЗ рд╕рдЬрд╛рддреЗ рд╣реИрдВред


рдЕрдм рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ:


рд╕рд╛рд░ рд╡рд┐рд╡рд░рдг рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред рд╡рд┐рд╡рд░рдг рд╕рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдо рд╕рд┐рд░реНрдл рдЙрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╢рдмреНрдж рддрдВрдЧ рдпреБрдЧреНрдорди рд╣реИ - рддрдВрдЧ рдХрдиреЗрдХреНрд╢рдиред рдЖрд╡реЗрджрди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХрдордЬреЛрд░, рдмреЗрд╣рддрд░ред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЖрджрд░реНрд╢ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред рдХреНрдпреЛрдВ? рд╣рд╛рдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрди рдореЗрдВ рдЙрдЪреНрдЪрддрдо рд╕реНрддрд░ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо рджреЛ рдмрд╛рд░ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИ "рдирдпрд╛ рдПрдХ рд╕реБрд░рд╛рдЧ рд╣реИ" - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдирдП рдХрд╛ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡реЗрджрди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдХрдо рддрдВрдЧ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдмреЗрд╣рддрд░ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдирдП рдбреАрдмрдЧрд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдбреАрдмрдЧрд▓реЗрдпрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреМрди рд╕рд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рд╕реЗ рдпрд╛ рдореБрдЦреНрдп рд╕реЗ рдкрд╛рд░рд┐рдд рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред


рдЕрдм рд╣рдордиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдо (IoC) рдХреНрдпрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдордг (DIP) рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рдХреНрдпрд╛ рд╣реИред IoC рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рддрд┐рдорд╛рди рд╣реИред рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдХ рдкреИрдЯрд░реНрди рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ рд╡рд░реНрдЧ рдЙрд╕ рд╢реНрд░реЗрдгреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ ILayer рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


IoC рдХрдВрдЯреЗрдирд░


рдПрдХ IoC рдХрдВрдЯреЗрдирд░ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ (рдирд┐рд░реНрднрд░рддрд╛) рд╣реЛрддреА рд╣реИрдВред рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдиреНрдпрдерд╛ рд╕реЗрд╡рд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИред рдЕрд░реНрдХ - рд╕рдВрдХрд▓реНрдкред рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд IoC рдХрдВрдЯреЗрдирд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


  public static class IoCContainer { private static readonly Dictionary<Type, Type> _registeredObjects = new Dictionary<Type, Type>(); public static dynamic Resolve<TKey>() { return Activator.CreateInstance(_registeredObjects[typeof(TKey)]); } public static void Register<TKey, TConcrete>() where TConcrete : TKey { _registeredObjects[typeof(TKey)] = typeof(TConcrete); } } 

рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЗрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП)ред


рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ConsoleLayer рдпрд╛ DebugLayer рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдереА) рдЗрд╕ рддрд░рд╣ рд╕реЗ:


  IoCContainer.Register<ILayer, ConsoleLayer>(); 

рдФрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдкрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ:


  ILayer layer = IoCContainer.Resolve<ILayer>(); layer.Write("Hello from IoC!"); 

рдЕрд╕рд▓реА рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ, рдбрд┐рд╕реНрдкреЛрдЬрд╝ () рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдП рд╣реИрдВред


рд╡реИрд╕реЗ, рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд░реНрде рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдИрдУрд╕реА рд╢рдмреНрдж рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд▓ рд╣реА рдореЗрдВ DI рдХрдВрдЯреЗрдирд░ рд╢рдмреНрдж рдХрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдЕрднреА рднреА рд▓рд╛рдЧреВ рд╣реИ)ред


рд╕рдВрд░рдЪрдирд╛ рд░реВрдЯ рдореЗрдВ рд╕реЗрд╡рд╛ рдЬреАрд╡рдирдХрд╛рд▓ + рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ


ASP.NET рдХреЛрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ Startup.cs рдлрд╝рд╛рдЗрд▓ рд╣реЛрддреА рд╣реИ, рдЬреЛ DI рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реНрд╕рд╢рд┐рдк рд╡рд┐рдзрд┐ рдореЗрдВ DI рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред


  public void ConfigureServices(IServiceCollection services) { services.AddScoped<ISomeRepository, SomeRepository>(); } 

рдпрд╣ рдХреЛрдб SomeRepository рд╡рд░реНрдЧ рдХреЛ DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдЧрд╛, рдЬреЛ ISomeRepository рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ AddScoped рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рднреА рдкреГрд╖реНрда рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


  services.AddScoped<SomeRepository>(); 

рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдирд╛ рд▓рдЪреАрд▓рд╛рдкрди рдЦреЛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд░реАрдмреА рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╕рдордп, рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Liskov рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо "рдХрд▓рд╛рдИ рдХреА рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ" рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рдЖрдк рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред


рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - AddSingleton рдФрд░ AddTransientред
AddSingleton рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реЗрд╡рд╛ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЙрд▓ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрдореЛрд░реА рд▓реАрдХ рдФрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рдВрднрд╡ рд╣реИрдВред


AddSingleton рдореЗрдВ рдереЛрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдЗрд╕реЗ рдпрд╛ рддреЛ рдЗрд╕рдХреА рдкрд╣рд▓реА рдкрд╣реБрдВрдЪ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


  services.AddSingleton<IYourService, YourService>(); 

рдпрд╛ рддреЛ рддреБрд░рдВрдд рдЬрдм рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ


  services.AddSingleton<IYourService>(new YourService(param)); 

рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рдореЗрдВ, рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк AddSingleton рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рди рдХреЗрд╡рд▓ рдЬреЛрдбрд╝реЗ рдЧрдП рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ AddTransient / AddScoped рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  services.AddTransient<IYourService>(o => new YourService(param)); 

рдФрд░ рдЕрдВрдд рдореЗрдВ, AddTransient рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЬрдм рдЖрдк рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рд╣рд▓реНрдХреЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЬреЛ рд╕реНрдореГрддрд┐ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдпрджрд┐ AddSingleton рдФрд░ AddScoped рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ AddTransient рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрд╡рд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рдпрд╣ AddTransient рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ 2 рдмрд╛рд░ рдЕрдкрдиреА рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рд╣реИ:


  public class Operation { public Guid OperationId { get; private set; } public Operation() { OperationId = Guid.NewGuid(); } } 

рдФрд░ рдПрдХ рджреВрд╕рд░реА рд╢реНрд░реЗрдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЖрд╢реНрд░рд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:


  public class OperationService { public Operation Operation { get; } public OperationService (Operation operation) { Operation = operation; } } 

рдЕрдм рд╣рдо рджреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:


  services.AddTransient<Operation>(); services.AddScoped<OperationService>(); 

рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ, рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд░рд╕реАрдж рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдбрд┐рдмрдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред


  public IActionResult Index([FromServices] Operation operation, [FromServices] OperationService operationService) { Debug.WriteLine(operation.OperationId); Debug.WriteLine(operationService.Operation.OperationId); return View(); } 

рддреЛ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо AddTcient рдХреЛ AddScoped рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ 2 рд╕рдорд╛рди рдорд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВред


ASP.NET рдХреЛрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IConfiguration рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди appsettings.json рдФрд░ appsettings.Development.json рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред IHostingEnvironment рдФрд░ ILoggerFactory рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдирд┐рдореНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдорд╛рдг (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:


  private readonly IConfiguration _configuration; public SomePageController(IConfiguration configuration) { _configuration = configuration; } public async Task<IActionResult> Index() { string connectionString = _configuration["connectionString"]; } 

рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд┐рдЬреА рд░реАрдбрд╛рдпрдирд▓реА рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╛рдпрд░ рд╡рд╛рд▓рд╛ рдПрдХ рдЪрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рдЬреА рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдпрд╛ рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрднреА-рдХрднреА рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдПрдХреНрд╢рди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрдм рдЖрдк [FromServices] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


  public IActionResult About([FromServices] IDateTime dateTime) { ViewData["Message"] = ┬л  " + dateTime.Now; return View(); } 

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


рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░


рд╣рдордиреЗ рдЬреЛ рджреЗрдЦрд╛ рдФрд░ рдЬреЛ ASP.NET Core DI рдХрдВрдЯреЗрдирд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рд╡рд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИред рддрдерд╛рдХрдерд┐рдд рдкреНрд░реЙрдкрд░реНрдЯреА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЕрднреА рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдбрдмреНрд▓реНрдпреВрдПрдЪрдУ рдХреЛрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдо рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдорд┐рд╕рд╛рд▓ рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рд╡рд░реНрдЧ рд╣реИ:


  public class Operation { public Guid OperationId { get; set; } public Operation() {} } 

рдЬрд┐рд╕реЗ рд╣рдо рд▓рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,


  services.AddTransient<Operation>(); 

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


рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЕрдиреНрдп рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЗрд╡рд▓ рдЙрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрдж рд╣реИред рдФрд░ рдХрд╛рдлреА рдЕрдХреНрд╕рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рдорд▓рд╛ - DI рдХрдВрдЯреЗрдирд░, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рддред
рдпрд╣рд╛рдБ ASP.NET рдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХреБрдЫ рддреГрддреАрдп-рдкрдХреНрд╖ DI рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ: Autofac, Castle Windsor, LightInject, DryIoC, StructureMap, Unity


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдирдХ DI рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕рдВрдкрддреНрддрд┐ / рд╡рд┐рдзрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЖрд╢реНрд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдлреИрдХреНрдЯреНрд░реА рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  services.AddTransient<IDataService, DataService>((dsvc) => { IOtherService svc = dsvc.GetService<IOtherService>(); return new DataService(svc); }); 

рдпрджрд┐ рдирд┐рд░реНрднрд░ рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, GetService рд░рд┐рдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред GetRequiredService рдХреА рдПрдХ рднрд┐рдиреНрдирддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА рдпрджрд┐ рдирд┐рд░реНрднрд░ рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИред
GetService рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЖрд╢реНрд░рд┐рдд рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред


Autofac


рдЖрдЗрдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдСрдЯреЛрдлреИрдХ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЖрд╕рд╛рдиреА рд╕реЗ, рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдСрдЯреЛрдлреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред


NuGet рдкреИрдХреЗрдЬ Autofac.Extensions.D dependencyInjection рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдХреЙрдиреНрдлрд┐рдЧрд░рд╕реНрд╡рд╛рдЗрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рд╢реВрдиреНрдп рд╕реЗ IServiceProvider рдореЗрдВ рдмрджрд▓реЗрдВред рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ


  public IContainer ApplicationContainer { get; private set; } 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡рд░реНрдЧ рдХреЗ рдХреЙрдиреНрдлрд┐рдЧрд░рд╕реНрд╡рд╛рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ):


  services.AddTransient<ISomeRepository, SomeRepository>(); var builder = new ContainerBuilder(); builder.Populate(services); builder.RegisterType<AnotherRepository>().As<IAnotherRepository>(); this.ApplicationContainer = builder.Build(); return new AutofacServiceProvider(this.ApplicationContainer); 

рдпрд╣рд╛рдБ рдмрд┐рд▓реНрдбрд░ред IServiceCollection рд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗрд╡рд╛рдПрдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдЖрдЧреЗ рдпрд╣ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ редegisterTypeред рдЕрд░реЗ рд╣рд╛рдБред рдореИрдВ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реЗ IS ISPProvider рдХреЗ рд▓рд┐рдП рдорд╛рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред


ASP.NET рдХреЛрд░ рдХреЗ рд╕рд╛рде AOP - рдСрдЯреЛрдлреЗрдХ рдЗрдВрдЯрд░реНрд╕реЗрдкреНрдЯрд░реНрд╕


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


.NET рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм AOP рдХреЛрдб рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб ( PostSharp ) рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпреЗ рдЗрд╡реЗрдВрдЯ рд╣реБрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рдВрдЪ рд▓рд┐рдпрд╛ рд╣реИред


рдЖрдЗрдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдмрдирд╛рдПрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ рд╡рд╣ рд╣реИ рд▓реЙрдЧрд┐рдВрдЧред
Autofac.Extensions.D dependencyInjection рдкреИрдХреЗрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рднреА Autofac.Extras.DynamicProxy рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ
рд╕реНрдерд╛рдкрд┐рдд? рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЙрдЧ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


  public class Logger : IInterceptor { public void Intercept(IInvocation invocation) { Debug.WriteLine($"Calling {invocation.Method.Name} from Proxy"); invocation.Proceed(); } } 

рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд╣рдорд╛рд░реЗ рдкрдВрдЬреАрдХрд░рдг рдСрдЯреЛрдлреИрдХ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:


  builder.Register(i => new Logger()); builder.RegisterType<SomeRepository >() .As<ISomeRepository >() .EnableInterfaceInterceptors() .InterceptedBy(typeof(Logger)); 

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


рд╣рдо рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред InterceptedBy (рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рдХрдбрд╝рд╣рд╛рд░рд╛)); рдФрд░ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЕрд╡рд░реЛрдзрди рдЬреЛрдбрд╝реЗрдВ [рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ (рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рдХрдбрд╝рд╣рд╛рд░рд╛))) рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП - рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреНрд▓рд╛рд╕ рд╣реЗрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


middleware


ASP.NET рдореЗрдВ рдХреЛрдб рдХреЙрд▓ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣реЛрддреА рд╣реИред рдпреВрдЖрдИ / рдПрдорд╡реАрд╕реА рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреА рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо Startup.cs рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ


  app.Use(async (context, next) => { Debug.WriteLine(context.Request.Path); await next.Invoke(); }); 

рддрдм рд╣рдо рдбрд┐рдмрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреНрдпрд╛ рдлрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ AOP рдХреА рдХреНрд╖рдорддрд╛ "рдЖрдЙрдЯ рдСрдл рдмреЙрдХреНрд╕" рд╣реЛрддреА рд╣реИ
рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдереЛрдбрд╝рд╛ рдмреЗрдХрд╛рд░, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг, рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛:


  public void Configure(IApplicationBuilder app) { app.Use(async (context, next) => { await context.Response.WriteAsync("Hello!" + Environment.NewLine); await next.Invoke(); }); app.Run(async context => { await context.Response.WriteAsync("Hello again."); }); } 

рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдРрдк рд╕реЗред рдЕрдЧрд▓рд╛, рдЕрдЧрд▓рд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (), рдЕрдЧрд▓реА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╕рдм рдХреБрдЫ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдРрдк рдХреЗ рдмрд╛рджред рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдЧ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рд╣реА рдХреБрдЫ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк app.ap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  private static void Goodbye(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("Goodbye!"); }); } public void Configure(IApplicationBuilder app) { app.Map("/goodbye", Goodbye); app.Run(async context => { await context.Response.WriteAsync("Hello!"); }); } 

рдЕрдм, рдпрджрд┐ рдЖрдк рд╕рд╛рдЗрдЯ рдХреЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рда "рд╣реИрд▓реЛ!" рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдЧреБрдбрдмрд╛рдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЧреБрдбрдмрд╛рдп рджреЗрдЦреЗрдВрдЧреЗред


рдпреВрдЬрд╝ рдПрдВрдб рдореИрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХреБрдЫ рдЦрд╛рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реА рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЪреЗрди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП UseWhen рдпрд╛ MapWhen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрднреА рддрдХ рдмреЗрдХрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд╣реИ рдирд╛? рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рд╣реИ:


  app.Use(async (context, next) => { context.Response.Headers.Add("X-Frame-Options", "DENY"); context.Response.Headers.Add("X-Content-Type-Options", "nosniff"); context.Response.Headers.Add("X-Xss-Protection", "1"); await next(); }); 

рдпрд╣рд╛рдВ рд╣рдо рдкреЗрдЬ рдХреЛ рд╣реИрдХрд░ рдХреЗ рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


рдпрд╛ рдпрд╣рд╛рдБ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


  var supportedCultures = new[] { new CultureInfo("ru"), new CultureInfo("fr") }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("ru"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); 

рдЕрдм рдпрджрд┐ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рд╕рдВрд╕реНрдХреГрддрд┐ = рдкреГрд╖реНрда рдкрддреЗ рдкрд░ рдлрд╝реНрд░реА, рддреЛ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднрд╛рд╖рд╛ рдХреЛ рдлрд╝реНрд░реЗрдВрдЪ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛)


рдлрд┐рд▓реНрдЯрд░


рдпрджрд┐ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ MVC рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ, рддреЛ рдлрд╝рд┐рд▓реНрдЯрд░ MVC рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рдореНрди рдпреЛрдЬрдирд╛рдмрджреНрдз рдЖрд░реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


рдлрд┐рд▓реНрдЯрд░


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдк рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╛ рдХрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред


рдлрд┐рд░ рд╡реЗ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд┐рд▓реНрдЯрд░ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдлрд╝рд┐рд▓реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдлрд┐рд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХреНрд╢рди рдлрд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХреА рдорджрдж рд╕реЗ, рдЖрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдирд╛рдо рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рдж рдлрд╝рд┐рд▓реНрдЯрд░ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рджреЗрддрд╛ рд╣реИред рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдУрдкреА-рд╢рдиреА рдкреНрд▓рд╕ред


рдкрд░рд┐рдгрд╛рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЖрдкрдХреЛ рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реЗ рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХреНрд╢рди рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рди рд╣реЛред рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реБрдП рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддред


. :


  public class YourCustomFilter : Attribute, IAuthorizationFilter { public async void OnAuthorization(AuthorizationFilterContext context) { // -    ,     ,    context.Result = new ContentResult() { Content = "        " }; } } 

DI ( Startup.cs)


  services.AddScoped<YourCustomFilter>(); 

- Action


  [ServiceFilter(typeof(YourCustomFilter))] 

тАУ middleware - action . Configure


  public class MyMiddlewareFilter { public void Configure(IApplicationBuilder applicationBuilder) { applicationBuilder.Use(async (context, next) => { Debug.WriteLine("  middleware!"); await next.Invoke(); }); } } 

Action-


  [MiddlewareFilter(typeof(MyMiddlewareFilter))] 

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


All Articles