рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдЧрддрд┐ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЕрд╕рдлрд▓ рд▓реЗрдЦ

рдо рддреБрд░реБрдиреНрддреИ рд▓реЗрдЦрдХреЛ рд╢реАрд░реНрд╖рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреЗрдЫреБред рдореВрд▓ рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рддрд░ рдпрдерд╛рд░реНрдердкрд░рдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдХрд╕рд░реА рдЧрддрд┐ рджрд┐рдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рд░рд╛рдореНрд░реЛ, рднрд░рдкрд░реНрджреЛ рд╕рд▓реНрд▓рд╛рд╣ рджрд┐рдиреБ рдерд┐рдпреЛ, рддрд░ рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрд┐рдЩрдХреЛ рдХреНрд░рдордорд╛ рдпреЛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдореИрд▓реЗ рд╕реЛрдЪреЗрдХреЛ рдЬрд╕реНрддреЛ рдврд┐рд▓реЛ рдЫреИрди, LINQ рдореЗрд░рд╛ рджреБрдГрд╕реНрд╡рдкреНрдирд╣рд░реВрдорд╛ рднрдиреНрджрд╛ рдврд┐рд▓реЛ рдЫред рддрд░ рдЕрдиреНрддрдорд╛ рдерд╛рд╣рд╛ рднрдпреЛ рдХрд┐ рдореИрд▓реЗ рдкрдирд┐ рдорд╛рдкрдирдорд╛ рдЧрд▓реНрддреА рдЧрд░реЗрдХреЛ рдЫреБ... рдпреЛ рдЬреАрд╡рди рдХрдерд╛рдХреЛ рд╡рд┐рд╡рд░рдг рдХрд╛рдЯрд┐рдПрдХреЛ рдЫ рд░ рдХрдореЗрдиреНрдЯрдорд╛ рдЫред рдЙрджрд╛рд╣рд░рдг рдПрдХрджрдо рд╕рд╛рдорд╛рдиреНрдп рдЫ рд░ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдПрдХ рдЙрджреНрдпрдо рдорд╛ рдЧрд░рд┐рдиреНрдЫ рдЬрд╕реНрддреИ рд▓рд╛рдЧреВ, рдпреЛ рдПрдХрджрдо рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рднрдпреЛ, рдпреЛ рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ, рдЬреАрд╡рди рдХреЛ рдкреНрд░рджрд░реНрд╢рди: рд▓реЗрдЦ рдХреЛ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдХреЛ рдЧрддрд┐ рдорд╛ рдкреНрд░рднрд╛рд╡ рдерд┐рдпреЛред рдмрд╛рд╣реНрдп рддрд░реНрдХрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдзреНрдпрд╛рди рджрд┐рди рдпреЛрдЧреНрдп рдЫреИрди: Moq, Autofac, EF Core рд░ рдЕрдиреНрдп "рд╕реНрдЯреНрд░реНрдпрд╛рдк"ред

рдореИрд▓реЗ рдпрд╕ рд▓реЗрдЦрдХреЛ рдЫрд╛рдкрдорд╛ рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реЗ: рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдХрд┐рди рдврд┐рд▓реЛ рдЫ

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, рд▓реЗрдЦрдХрд▓реЗ рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдкреНрд░рдХрд╛рд░ рд╡рд┐рдзрд┐рд╣рд░реВ рд╕рд┐рдзреИ рдХрд▓ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫ рдЬреБрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдзреЗрд░реИ рдЧрддрд┐ рджрд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рд╣реЛред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, IL рдЙрддреНрд╕рд░реНрдЬрди рдЫ, рддрд░ рдо рдпрд╕рд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ, рдХрд┐рдирдХрд┐ рдпреЛ рдХрд╛рд░реНрдп рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╢реНрд░рдо-рдЧрд╣рди рддрд░рд┐рдХрд╛ рд╣реЛ, рдЬреБрди рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓реЗ рднрд░рд┐рдПрдХреЛ рдЫред

рдкреНрд░рддрд┐рдмрд┐рдореНрдмрдХреЛ рдЧрддрд┐рдХреЛ рдмрд╛рд░реЗрдорд╛ рдореИрд▓реЗ рд╕рдзреИрдВ рд╕рдорд╛рди рдзрд╛рд░рдгрд╛ рд░рд╛рдЦреЗрдХреЛ рдХреБрд░рд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рдореИрд▓реЗ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд▓реЗрдЦрдХрдХреЛ рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреНрд░рд╢реНрди рдЙрдард╛рдЙрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рд░рд╛рдЦреЗрдХреЛ рдЫреИрдиред

рдореИрд▓реЗ рдкреНрд░рд╛рдпрдГ рдЙрджреНрдпрдордорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрдХреЛ рд╕рд░рд▓ рдкреНрд░рдпреЛрдЧрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдЫреБред рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЗрдиреНрдЫред рд╕рдореНрдкрддреНрддреА рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЗрдиреНрдЫред SetValue рд╡рд┐рдзрд┐ рднрдирд┐рдиреНрдЫ рд░ рд╕рдмреИ рд░рдорд╛рдЙрдБрдЫрдиреНред рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░рдорд╛ рдореВрд▓реНрдп рдЖрдЗрдкреБрдЧреЗрдХреЛ рдЫ, рд╕рдмреИ рдЦреБрд╕реА рдЫрдиреНред рдзреЗрд░реИ рд╕реНрдорд╛рд░реНрдЯ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ - рд╡рд░рд┐рд╖реНрдард╣рд░реВ рд░ рдЯреЛрд▓реА рдиреЗрддреГрддреНрд╡рд╣рд░реВ - рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд╕реНрддреБрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рдпрд╕реНрддреЛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди "рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ" рдореНрдпрд╛рдкрд░рд╣рд░реВ рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рдЕрд░реНрдХреЛрдорд╛ рдЖрдзрд╛рд░рд┐рддред рд╕рд╛рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рд╣реЛ: рд╣рд╛рдореА рд╕рдмреИ рдлрд┐рд▓реНрдбрд╣рд░реВ рд▓рд┐рдиреНрдЫреМрдВ, рд╕рдмреИ рдЧреБрдгрд╣рд░реВ рд▓рд┐рдиреНрдЫреМрдВ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН: рдпрджрд┐ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕рджрд╕реНрдпрд╣рд░реВрдХреЛ рдирд╛рдорд╣рд░реВ рдореЗрд▓ рдЦрд╛рдиреНрдЫ рднрдиреЗ, рд╣рд╛рдореА рд╕реЗрдЯрднреНрдпрд╛рд▓реБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫреМрдВред рд╕рдордп-рд╕рдордпрдорд╛ рд╣рд╛рдореА рдЧрд▓реНрддреАрд╣рд░реВрдХреЛ рдХрд╛рд░рдг рдЕрдкрд╡рд╛рджрд╣рд░реВ рд╕рдорд╛рддреНрдЫреМрдВ рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдХреБрдиреИ рдПрдХ рдкреНрд░рдХрд╛рд░рдорд╛ рдХреЗрд╣реА рд╕рдореНрдкрддреНрддрд┐ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдиреМрдВ, рддрд░ рдпрд╣рд╛рдБ рдкрдирд┐ рддреНрдпрд╣рд╛рдБ рдПрдХ рддрд░рд┐рдХрд╛ рдЫ рдЬрд╕рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдЧрд░реНрджрдЫред рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН / рд╕рдорд╛рддреНрдиреБрд╣реЛрд╕реНред

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

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

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

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

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

рдпреЛ рдХрд╕рд░реА рд╣рд╛рд╕рд┐рд▓ рд╣реБрдиреНрдЫ? рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛, рдпреЛ рддрд░реНрдХрдмрд╛рдЯ рдлрд░рдХ рдЫреИрди рдЬреБрди рдкреНрд▓реЗрдЯрдлрд░реНрдорд▓реЗ JIT рдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдЬрдм рдПрдХ рд╡рд┐рдзрд┐ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдмреЛрд▓рд╛рдЗрдиреНрдЫ, рдпреЛ рд╕рдВрдХрд▓рд┐рдд рд╣реБрдиреНрдЫ (рд░, рд╣реЛ, рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЫрд┐рдЯреЛ рдЫреИрди); рддреНрдпрд╕рдкрдЫрд┐рдХрд╛ рдХрд▓рд╣рд░реВрдорд╛, рдирд┐рдпрдиреНрддреНрд░рдг рдкрд╣рд┐рд▓реЗ рдиреИ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рд╡рд┐рдзрд┐рдорд╛ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреНрдЫ, рд░ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдбреНрд░рдбрд╛рдЙрдирд╣рд░реВ рд╣реБрдиреЗрдЫреИрдирдиреНред

рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдЗрдБ JIT рд╕рдВрдХрд▓рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рдХреЛ AOT рд╕рдордХрдХреНрд╖рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдореНрд░реЛ рд╕рд╣рдпреЛрдЧрдорд╛ рдЖрдЙрдиреЗрдЫрдиреНред

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

рдпрд╕рдорд╛ рддрд░реНрдХ рдЫред рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рдирд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдмрддрд╛рдЙрдБрдЫ рдХрд┐ рдпрджрд┐ рдХреЗрд╣рд┐ рдХрдореНрдкрд╛рдЗрд▓ рд░ рдХреНрдпрд╛рд╕ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдЧрд░реНрдиреБрдкрд░реНрдЫред

рдЕрдЧрд╛рдбрд┐ рд╣реЗрд░реНрджреИ, рдпреЛ рднрдирд┐рдиреНрдЫ рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдореНрдм рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХреНрдпрд╛рд╕ рдпрд╕рдХреЛ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН, рднрд▓реЗ рдкрдирд┐ рддрдкрд╛рдЗрдБ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдиред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпрд╣рд╛рдБ рдореИрд▓реЗ рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрдХреЛ рд▓реЗрдЦрдХреЛ рд▓реЗрдЦрдХрдХреЛ рдереЗрд╕рд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрджреИ рдЫреБред

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

рддреНрдпрд╣рд╛рдБ рдХреЗрд╣реА рд╕рд╛рд░ рдЫред рд╕рдореНрдкрд░реНрдХ рд╣реБрди рджрд┐рдиреБрд╣реЛрд╕реНред рддреНрдпрд╣рд╛рдБ рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╢рд░реАрд░ рд╕рдВрдЧ рдЕрдХреНрд╖рд░рд╣рд░реВ рдЫрдиреН, рдЬрд╕рдмрд╛рдЯ рдкрд╛рд░реНрд╕рд░ рд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░рд▓реЗ рдпреА рд╕рдорд╛рди рд╕рдореНрдкрд░реНрдХрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред рдПрдЙрдЯрд╛ рдкрддреНрд░ рдЖрдпреЛ, рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкрдвреНрдпреМрдВ, рдпрд╕рд▓рд╛рдИ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВрдорд╛ рдкрд╛рд░реНрд╕ рдЧрд░реНрдпреМрдВ, рд╕рдореНрдкрд░реНрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНтАНрдпреМрдВ, рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдпреМрдВред

рдпреЛ рдкреНрд░рд╛рдердорд┐рдХ рдЫред рдорд╛рдиреМрдВ рдХрд┐ рд╕рдореНрдкрд░реНрдХрдорд╛ рдкреВрд░рд╛ рдирд╛рдо, рдЙрдореЗрд░ рд░ рд╕рдореНрдкрд░реНрдХ рдлреЛрди рдЧреБрдгрд╣рд░реВ рдЫрдиреНред рдпреЛ рдбрд╛рдЯрд╛ рдкрддреНрд░ рдорд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдЫред рд╡реНрдпрд╡рд╕рд╛рдпрд▓реЗ рдкрддреНрд░рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧрдорд╛ рдЬреЛрдбрд╛рд╣рд░реВрдорд╛ рдЗрдХрд╛рдИ рдЧреБрдгрд╣рд░реВ рдореНрдпрд╛рдк рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдирдпрд╛рдБ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдердкреНрди рд╕рдХреНрд╖рдо рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдкрдирд┐ рдЪрд╛рд╣рдиреНрдЫред рдпрджрд┐ рдХрд╕реИрд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯрдорд╛ рдЯрд╛рдЗрдкреЛ рдЧрд░реЗрдХреЛ рдЫ рд╡рд╛ рдпрджрд┐ рд░рд┐рд▓реАрдЬ рд╣реБрдиреБ рдЕрдШрд┐ рдирдпрд╛рдБ рдврд╛рдБрдЪрд╛рдорд╛ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрджреИ, рдирдпрд╛рдБ рд╕рд╛рдЭреЗрджрд╛рд░рдмрд╛рдЯ рдореНрдпрд╛рдкрд┐рдЩ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рд╕рд╕реНрддреЛ рдбрд╛рдЯрд╛рдлрд┐рдХреНрд╕рдХреЛ рд░реВрдкрдорд╛ рдирдпрд╛рдБ рдореНрдпрд╛рдкрд┐рдЩ рд╕рд╣рд╕рдВрдмрдВрдз рдердкреНрди рд╕рдХреНрдЫреМрдВред рдЕрд░реНрдерд╛рддреН рдЬреАрд╡рдирдХреЛ рдЙрджрд╛рд╣рд░рдг ред

рд╣рд╛рдореА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫреМрдВ, рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдХрд╛рдо рдЧрд░реНрджрдЫред

рдо рдХреЛрдб рдкреНрд░рджрд╛рди рдЧрд░реНрджрд┐рди: рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕реНрд░реЛрддрд╣рд░реВ рдЫрдиреН, рд░ рддрд┐рдиреАрд╣рд░реВ рд▓реЗрдЦрдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рд▓рд┐рдЩреНрдХ рдорд╛рд░реНрдлрдд GitHub рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред рддрдкрд╛рдИрдВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд╣рд┐рдЪрд╛рдирднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдпрд╛рддрдирд╛ рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдорд╛рдкрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рдорд╛рдорд▓рд╛рдорд╛ рдЕрд╕рд░ рдЧрд░реНрдЫред рдо рдХреЗрд╡рд▓ рджреБрдИ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдХреЛрдб рджрд┐рдиреЗрдЫреБ рдЬрд╕рд▓реЗ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░рд▓рд╛рдИ рдЫреБрдЯреНрдпрд╛рдЙрди рд╕рдХреНрдЫ, рдЬреБрди рдЫрд┐рдЯреЛ рд╣реБрдиреБрдкрд░реНрджрдЫ, рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░рдмрд╛рдЯ, рдЬреБрди рдврд┐рд▓реЛ рд╣реБрдиреБрдкрд░реНрджрдЫред

рддрд░реНрдХ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫ: рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐рд▓реЗ рдЖрдзрд╛рд░рднреВрдд рдкрд╛рд░реНрд╕рд░ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЬреЛрдбреАрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред LINQ рддрд╣ рдкрд╛рд░реНрд╕рд░ рд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рддрд░реНрдХ рд╣реЛ, рдЬрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рдиреНрджрд░реНрднрдорд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ рд░ рдкрд╛рд░реНрд╕рд░рдмрд╛рдЯ рдЬреЛрдбреАрд╣рд░реВрд╕рдБрдЧ рдХреБрдЮреНрдЬреАрд╣рд░реВ рддреБрд▓рдирд╛ рдЧрд░реНрджрдЫ (рдпреА рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐ LINQ рдмрд┐рдирд╛ рдХреЛрдб рдЫ)ред рдЕрд░реНрдХреЛ, рдЬреЛрдбреАрд╣рд░реВрд▓рд╛рдИ рдореБрдЦреНрдп рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рд╡рд┐рдзрд┐рдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫ рд░ рдЬреЛрдбреАрд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдЗрдХрд╛рдИрдХреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЧреБрдгрд╣рд░реВрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдиреНрдЫред

"рдлрд╛рд╕реНрдЯ" (рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрдорд╛ рдЙрдкрд╕рд░реНрдЧ рдлрд╛рд╕реНрдЯ):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ, рд╕реЗрдЯрд░ рдЧреБрдгрд╣рд░реВрдХреЛ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ - рд╕рдВрдХрд▓рд┐рдд lambdas рдЬрд╕рд▓реЗ рд╕реЗрдЯрд░ рдЗрдХрд╛рдИрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрджрдЫред рдирд┐рдореНрди рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ:

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action<Contact, string> GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

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

"рдврд┐рд▓реЛ" (рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрдорд╛ рдЙрдкрд╕рд░реНрдЧ рдврд┐рд▓реЛ):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

рдпрд╣рд╛рдБ рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ рдЧреБрдгрд╣рд░реВ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ рд░ SetValue рд▓рд╛рдИ рд╕рд┐рдзреИ рдХрд▓ рдЧрд░реНрдЫреМрдВред

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

рдЕрдм BenchmarkDotNet рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рджрд░реНрд╢рди рдЬрд╛рдБрдЪ рдЧрд░реМрдВред рд░ рдЕрдЪрд╛рдирдХ... (рд╕реНрдкреЛрдЗрд▓рд░ - рдпреЛ рд╕рд╣реА рдирддрд┐рдЬрд╛ рд╣реЛрдЗрди, рд╡рд┐рд╡рд░рдг рддрд▓ рдЫ)

рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдЧрддрд┐ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЕрд╕рдлрд▓ рд▓реЗрдЦ

рд╣рд╛рдореА рдпрд╣рд╛рдБ рдХреЗ рджреЗрдЦреНрдЫреМрдВ? рдлрд╛рд╕реНрдЯ рдЙрдкрд╕рд░реНрдЧрд▓рд╛рдИ рдЬрд┐рддреНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рд▓рдЧрднрдЧ рд╕рдмреИ рдкрд╛рд╕рд╣рд░реВрдорд╛ рдврд┐рд▓реЛ рдЙрдкрд╕рд░реНрдЧ рднрдПрдХрд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рднрдиреНрджрд╛ рдврд┐рд▓реЛ рд╣реБрди рдЬрд╛рдиреНрдЫред рдпреЛ рдЖрд╡рдВрдЯрди рд░ рдХрд╛рдордХреЛ рдЧрддрд┐ рджреБрд╡реИрдХреЛ рд▓рд╛рдЧрд┐ рд╕рддреНрдп рд╣реЛред рдЕрд░реНрдХреЛрддрд░реНрдл, рдЬрд╣рд╛рдБ рд╕рдореНрднрд╡ рднрдПрд╕рдореНрдо рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЕрднрд┐рдкреНрд░реЗрд░рд┐рдд LINQ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореНрдпрд╛рдкрд┐рдЩрдХреЛ рд╕реБрдиреНрджрд░ рд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛рд▓рд╛рдИ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдШрдЯрд╛рдЙрдБрдЫред рдлрд░рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдХреЛ рд╣реЛред рдкрд╛рд╕рд╣рд░реВрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдЩреНрдЦреНрдпрд╛рдорд╛ рдкреНрд░рд╡реГрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджреИрдиред рдлрд░рдХ рдорд╛рддреНрд░ рдорд╛рдкрди рдорд╛ рдЫред LINQ рдХреЛ рд╕рд╛рде рдпреЛ 4 - 200 рдЧреБрдгрд╛ рдврд┐рд▓реЛ рдЫ, рддреНрдпрд╣рд╛рдБ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕реНрдХреЗрд▓рдорд╛ рдЕрдзрд┐рдХ рдлреЛрд╣реЛрд░ рдЫред

UPDATED

рдореИрд▓реЗ рдореЗрд░реЛ рдЖрдБрдЦрд╛рд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реЗрди, рддрд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛, рд╣рд╛рдореНрд░реЛ рд╕рд╣рдХрд░реНрдореАрд▓реЗ рдореЗрд░реЛ рдЖрдБрдЦрд╛ рд╡рд╛ рдореЗрд░реЛ рдХреЛрдбрд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реЗрдирдиреН - рджрд┐рдорд┐рддреНрд░реА Tikhonov 0x1000000ред рдореЗрд░реЛ рд╕рдорд╛рдзрд╛рдирд▓рд╛рдИ рджреЛрд╣реЛрд░реЛ-рдЬрд╛рдБрдЪ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдЙрдирд▓реЗ рдЙрддреНрдХреГрд╖реНрдЯрддрд╛рдХрд╛ рд╕рд╛рде рдкрддреНрддрд╛ рд▓рдЧрд╛рдП рд░ рдПрдЙрдЯрд╛ рддреНрд░реБрдЯрд┐ рдФрдВрд▓реНрдпрд╛рдП рдЬреБрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рдзреЗрд░реИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХрд╛ рдХрд╛рд░рдг рдореИрд▓реЗ рдЫреБрдЯреЗрдХреЛ рдЫреБ, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рджреЗрдЦрд┐ рдЕрдиреНрддрд┐рдорд╕рдореНрдоред Moq рд╕реЗрдЯрдЕрдкрдорд╛ рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рдмрдЧ рдлрд┐рдХреНрд╕ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╕рдмреИ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдард╛рдЙрдБрдорд╛ рдЦрд╕реЗред рдкреБрди: рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЕрдиреБрд╕рд╛рд░, рдореБрдЦреНрдп рдкреНрд░рд╡реГрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджреИрди - LINQ рд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдкреНрд░рддрд┐рдмрд┐рдореНрдм рднрдиреНрджрд╛ рдмрдвреА рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдЫред рдпрджреНрдпрдкрд┐, рдпреЛ рд░рд╛рдореНрд░реЛ рдЫ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрдХрд▓рдирдХреЛ рд╕рд╛рде рдХрд╛рдо рд╡реНрдпрд░реНрдердорд╛ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рд░ рдирддрд┐рдЬрд╛ рд╡рд┐рдирд┐рдпреЛрдЬрди рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рджреБрд╡реИрдорд╛ рджреЗрдЦрд┐рдиреНрдЫред рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХреНрд╖реЗрдкрдг, рдЬрдм рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдиреНрдЫ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ "рдЫрд┐рдЯреЛ" рд╡рд┐рдзрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ, рддрд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫред

рдпрд╕реНрддреЛ рдЫ рдкреБрди: рдкрд░реАрдХреНрд╖рдгрдХреЛ рдирддрд┐рдЬрд╛:

рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдЧрддрд┐ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЕрд╕рдлрд▓ рд▓реЗрдЦ

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

рдмреЗрдиреНрдЪрдорд╛рд░реНрдХ рдХреЛрдб рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рдЫред рдЬреЛ рдХреЛрд╣реАрд▓реЗ рдореЗрд░реЛ рд╢рдмреНрджрд╣рд░реВ рдбрдмрд▓-рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН:
HabraReflectionTests

PS: рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдорд╛ рдХреЛрдбрд▓реЗ IoC рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд░ рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрд╣рд░реВрдорд╛ рдпрд╕рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдЕрдиреНрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рдореИрд▓реЗ рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдЕрд╕рд░ рдкрд╛рд░реНрдиреЗ рд░ рдирддрд┐рдЬрд╛рд▓рд╛рдИ рд╢реЛрд░рдорд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреЗ рд╕рдмреИ рдХрд╛рд░рдХрд╣рд░реВрд▓рд╛рдИ рдХрд╛рдЯреЗрдХреЛ рдЫреБред

PPS: рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдорд┐рддреНрд░реА рдЯрд┐рдЦреЛрдиреЛрдн @0x1000000 Moq рд╕реЗрдЯрдЕрдкрдорд╛ рдореЗрд░реЛ рддреНрд░реБрдЯрд┐ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдЬрд╕рд▓реЗ рдкрд╣рд┐рд▓реЛ рдорд╛рдкрдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдпреЛред рдкрд╛рдардХрд╣рд░реВ рдордзреНрдпреЗ рдХреБрдиреИ рдкрдирд┐ рдкрд░реНрдпрд╛рдкреНрдд рдХрд░реНрдо рдЫ рднрдиреЗ, рдХреГрдкрдпрд╛ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЗрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдорд╛рдиреНрдЫреЗ рд░реЛрдХрд┐рдпреЛ, рдорд╛рдиреНрдЫреЗ рдкрдвреНрдпреЛ, рдорд╛рдиреНрдЫреЗрд▓реЗ рджреЛрд╣реЛрд░реЛ рдЬрд╛рдБрдЪ рдЧрд░реНрдпреЛ рд░ рдЧрд▓реНрддреА рдФрдВрд▓реНрдпрд╛рдпреЛред рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдпреЛ рд╕рдореНрдорд╛рди рд░ рд╕рд╣рд╛рдиреБрднреВрддрд┐рдХреЛ рдпреЛрдЧреНрдп рдЫред

PPPS: рд╢реИрд▓реА рд░ рдбрд┐рдЬрд╛рдЗрдирдХреЛ рдлреЗрджрдорд╛ рдкреБрдЧреНрдиреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд╛рдардХрд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рджред рдо рдПрдХрд░реВрдкрддрд╛ рд░ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБред рдкреНрд░рд╕реНрддреБрддрд┐рдХреЛ рдХреВрдЯрдиреАрддрд┐рд▓реЗ рдЪрд╛рд╣рд┐рдиреЗ рдзреЗрд░реИ рдЫреЛрдбреНрдЫ, рддрд░ рдореИрд▓реЗ рдЖрд▓реЛрдЪрдирд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреЗрдВред рдо рдкреНрд░рдХреНрд╖реЗрдкрдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреНрдЫреБред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди