рдЖрдЬ рдореИрдВ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░ рдореИрдк рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ), рдЬреЛ рдореБрдЭреЗ рдпреВрдирд┐рдЯреА рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдЖрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХрддрд╛ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рд╕рдВрдмрдВрдз рд╢реБрд░реВ рд╕реЗ рд╣реА рдХрд╛рд░рдЧрд░ рдирд╣реАрдВ рдерд╛, рдЬрдм рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд▓реЛрдореАрдЯрд░-рд▓рдВрдмреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдХреЛрдб рдореЗрдВ рджреЛ рд╕реМ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рджреБ: рдЦрдж рдмрд╛рддреЛрдВ рдкрд░ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗред
рд╕реНрдЯреНрд░рдХреНрдЪрд░реБрд░реИрдк рди рдХреЗрд╡рд▓ рдореБрдЭреЗ рдЕрдиреНрдп
DI \ IoC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдмрд╕ Google рдореЗрдВ рд╕реНрдЯреНрд░рдХреНрдЪреЛрд░рдкрд╛рдЗрдк рдмрдирд╛рдо рдпреВрдирд┐рдЯреА рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдЙрди рд▓рд┐рдВрдХреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд▓реЛрдЧ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреНрд░рдХреНрдЪрд░реБрд░реИрдк рдХрд╛рдо рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд▓рдЪреАрд▓рд╛ рдФрд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИред
рд▓рд┐рдВрдХ
рдПрдХ ,
рджреЛ рдФрд░
рддреАрди ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░ рдореИрдк рднреА рдХрд╛рдлреА рддреЗрдЬ рд╣реИред
рдпрд╣рд╛рдБ
http://www.sturmnet.org/blog/2010/03/03/04/poll-results-ioc-containers-for-net рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реЗ рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╣реБрдЖ рдерд╛ рдХрд┐ рдЖрддреНрдо-рд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕реЗ рдереЗ рдЬреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдлреА рд╣рдж рддрдХ рд╣реАрди рдереЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕ рд╕рдордп рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрдХрдиреАрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдХрдореА рдереАред рддрдм рдПрдХрддрд╛, рдПрдХрддрд╛ рдереА, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореБрдЭреЗ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░рдкрд╛рд░реНрдЯ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдерд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рднреА рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рдерд╛ред
рдХреНрдпрд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, StructureMap рдХреЗ рдлрд╛рдпрджреЗ:
- рдбреАрдПрд╕рдПрд▓ рд╕реЗрдЯрдЕрдк
- рд╣рд░ рдЪреАрдЬ рдХрд╛ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдЕрдиреБрдХреВрд▓рди
- рдЕрдВрдд рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА
- рдЖрдВрддрд░рд┐рдХ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдЕрд╡рд╕рд░
- рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рд╕рдорд░реНрдерди
рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдЕрднреА рднреА рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреНрд▓рд╕рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реБрдЦрдж рдЬреЛрдбрд╝ рдХрд╣рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
рдЕрдиреБрд╡рд░реНрддреА рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрд░реЗрдЦрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╕реНрдерд╛рдкрдирд╛
- рдкрдВрдЬреАрдХрд░рдг (рдЖрдзрд╛рд░, рдкреНрд░реЛрдлрд╛рдЗрд▓, рдкреНрд▓рдЧрдЗрдиреНрд╕, рд╕реНрдХреИрдирд┐рдВрдЧ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди)
- рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ (рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░, рдбрд┐рдлреЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдХрдВрдкрд╛рдЙрдВрдб рдкреНрд░рдХрд╛рд░, рдЬрд╝рдмрд░рджрд╕реНрддреА, рд╕реЗрдЯрд┐рдВрдЧ рддрд░реНрдХ)
- рдЧреБрдг (рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯрд┐рдВрдЧ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯрд┐рдВрдЧ, рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЧреБрдг рд╕реЗрдЯ рдХрд░рдирд╛, рдореМрдЬреВрджрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛)
- рдЬреАрд╡рди рдХрд╛ рд╕рдордп
- рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ (рдСрдирдХреНрд░рд┐рд╢рди, рдПрдирд░рд┐рдЪрд╡рд┐рде)
- рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░
- рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (DefaultConstructor, рдорд╛рдиреНрдпрдХрд░рдг, рдЕрдиреНрдп рд╕рднреА)
- рдкрд░реАрдХреНрд╖рдг
рдврд╛рдВрдЪрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдореИрдВ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реНрдЯреНрд░рдХреНрдЪрд░реБрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NuGet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрдВрд╕реЛрд▓ (рдЗрдВрд╕реНрдЯреЙрд▓-рдкреИрдХреЗрдЬ рд╕реНрдЯреНрд░рдХреНрдЪреБрд░рдкреЗрдЬрд╝) рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдпрд╛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдЦреЛрдЬ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреЗрдЬ
http://github.com/structuremap/structuremap/downloads рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрдВрдЬреАрдХрд░рдг
рд╕рдВрднрд╡рддрдГ рдХрд┐рд╕реА рднреА рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрдВрдЬреАрдХрд░рдг рд╣реИред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдХреНрдпрд╛ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдкрдХрд░рдг рдХрд╛ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд▓реЗрдЦрдХ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХреЗрд╡рд▓ рддрднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ, URL, рдлрд╝рд╛рдЗрд▓ рдкрде рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдПрдХ рд╣реА рдирд╕ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЖрдЗрдП рд╕рд░рд▓рддрдо рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рд╕реЗрдЯ рд╣реИ:
public interface IClass {} public interface IClass1 : IClass {} public interface IClass2 : IClass {} public class Class1 : IClass1 {} public class Class2 : IClass2 {}
рдпрд╣ рд╕реЗрдЯ рдЕрдм рддрдХ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореБрдЦреНрдп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЖрдЧреЗ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдВрдЧреЗред
рдЖрдзрд╛рд░
рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдереИрддрд┐рдХ
рдСрдмреНрдЬреЗрдХреНрдЯрдлреИрдХреНрдЯрд░реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
, рдпрд╛
рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рд╕рдВрднрд╡ рд╣реИред рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрди рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд░реНрдЧ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╣реИ, рдмрд╛рдХреА рдХрдХреНрд╖рд╛рдПрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдлреЗрдВрдХ рджреЗрддреА рд╣реИрдВред
рд╕реНрдерд┐рд░ ObjectFactory рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВред
public class RegisterByObjectFactory { public RegisterByObjectFactory() { ObjectFactory.Initialize(x => { x.For<IClass1>().Use<Class1>(); x.For<IClass2>().Use<Class2>(); }); } }
рд╕рдм рдХреБрдЫ рдбреАрдПрд╕рдПрд▓ рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреАрдПрд╕рдПрд▓ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдб рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рд░реНрдердХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
IC11 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП Class1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рднреА рд╕рд╣рдЬ рд╣реИ:
private static string ObjectFactoryExample() { new RegisterByObjectFactory(); var class1Inst = ObjectFactory.GetInstance<IClass1>(); var class2Inst = ObjectFactory.GetInstance<IClass2>(); return ObjectFactory.WhatDoIHave(); }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ GetInstance рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рддрд░реАрдХрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рддреИрдпрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╡рд┐рдзрд┐ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдо рдХреЗ рд╕рд╛рде
WhatDoIHave ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреЗ рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХрд╛ рдирд┐рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдФрд░ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИред
рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рд╡рдВрд╢ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╢рдмреНрдж рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЫрд┐рдкреА рд░рд╣реА рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рдж рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдЦреЛрд▓ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рдкреАрдЫреЗ, рдЕрдВрджрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░,
public class RegisterByContainer { public IContainer Container; public RegisterByContainer() { Container = new Container(x => { x.For<IClass1>().Use<Class1>(); x.For<IClass2>().Use<Class2>(); }); } }
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рд▓реИрдореНрдмреНрдбрд╛ рдПрдХ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдо рддрдм рдмрд╛рд╣рд░ рдХреЛ рджреЗрдВрдЧреЗ, рдФрд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдХрдВрдЯреЗрдирд░ рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗред рдпрд╛рдиреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░, ObjectFactory рд╕рд┐рд░реНрдл рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рд╣реИред
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЙрд╕реА рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдЧрд╛:
private static string ContainerExample() { var container = new RegisterByContainer().Container; var class1Inst = container.GetInstance<IClass1>(); var class2Inst = container.GetInstance<IClass2>(); return container.WhatDoIHave(); }
рд▓рд╛рдЗрди рдореЗрдВ рдЕрдЧрд▓реА рд╡рд╕реНрддреБ
рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╣реИ ред рджрд░рдЕрд╕рд▓, рдЖрдкрдиреЗ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕рдордп рдореЗрдВ рдХрд╣рд╛ рдерд╛ред рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред
public class RegisterByRegister { public IContainer Container; public RegisterByRegister() { var registry = new Registry(); registry.ForConcreteType<Class1>(); registry.ForConcreteType<Class2>(); Container = new Container(x => x.AddRegistry(registry)); } }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
ForConcreteType рдкрджреНрдзрддрд┐ рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рдп рд╣реИ
ред < T> () рдХреЗ рд▓рд┐рдПред < T> () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЙрдк-рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХреЗрдЧрд╛:
Container = new Container(); Container.Configure(x => x.AddRegistry(registry));
"рдХрдВрдХреНрд░реАрдЯ" рдХрдХреНрд╖рд╛рдПрдВ рдкрдврд╝рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
private static string ConcreteClassExample() { var container = new RegisterByRegister().Container; var class1Inst = container.GetInstance<Class1>(); var class2Inst = container.GetInstance<Class2>(); return container.WhatDoIHave(); }
рдкреНрд░реЛрдлрд╛рдЗрд▓
рд╕реНтАНрдЯреНрд░рдХреНтАНрдЪрд░рдкрд╛рдЗрдк рдЖрдкрдХреЛ рдирд╛рдорд╛рдВрдХрд┐рдд рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдореВрд╣ рдореИрдкрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдк рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public class RegisteringProfiles { public IContainer Container; public RegisteringProfiles() { var registry = new Registry(); registry.Profile("p1", x => x.For<IClass>().Use<Class1>()); registry.Profile("p2", x => x.For<IClass>().Use<Class2>()); Container = new Container(x => x.AddRegistry(registry)); } }
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕ 1 рдФрд░ рдХреНрд▓рд╛рд╕ 2 рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВред рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд╕реЗрдЯрдбрд┐рдлрд╝реЙрд▓реНрдЯрдкреЙрдлрд╝рд╛рдЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИред
private static string ProfilesExample() { var container = new RegisteringProfiles().Container; container.SetDefaultsToProfile("p1"); var class1Inst = container.GetInstance<IClass>(); container.SetDefaultsToProfile("p2"); var class2Inst = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдЦреБрд▓реА рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд░реНрдо рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдХрд╛рд░рдХред
рд╕рдХреНрд░рд┐рдп рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдПрдХ рд╣реА рд▓рд╛рдЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп,
рдХрдВрдЯреЗрдирд░ред рдЧреЗрдЯ рдЗрдирд╕реНрдЯреЗрдВрд╕ <IClass> (); рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВред
рдкреНрд▓рдЧ-рдЗрди
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдирд╛рдорд┐рдд рдкреНрд▓рдЧрдЗрди рд╣реИред
рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред IntelliSense рдФрд░ рдереЛрдбрд╝рд╛ рдпрд╣рд╛рдБ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢рдмреНрдж рдкреНрд▓рдЧрдЗрди, рдкреНрд▓рдЧ рдЗрди рдФрд░ рдкреНрд▓рдЧ рдЗрди
рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ
рдХрд┐ рдЖрдк рдЬрд┐рд╕
рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдпрд╛рдиреА рдкрд┐рдЫрд▓реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, IClass рдХреЛ PluginType рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ Class1 рдпрд╛ Class2 рдХреЛ PluggedType рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
public class RegisterAsPlugin { public IContainer Container; public RegisterAsPlugin() { Container = new Container(x => { x.For<IClass>().Use<Class1>().Named("Class1"); x.For<IClass>().Use<Class2>().Named("Class2"); }); } }
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХрдХреНрд╖рд╛рдПрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рднреА рджреЗрддреЗ рд╣реИрдВред
рдирд╛рдорд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
private static string PluginExample() { var container = new RegisterAsPlugin().Container; var class1Inst = container.GetInstance<IClass>("Class1"); var class2Inst = container.GetInstance<IClass>("Class2"); var instanceDef = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрдВрдЯреЗрдирд░ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд╡рд╛рд▓ рдЙрдард╛рдПрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдо рдкреНрд▓рдЧрдЗрди рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде GetInstance рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕ рдХрд╣рд╛рд╡рдд рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ "рдЬреЛ рдЕрдВрддрд┐рдо рд╣реИ, рд╡рд╣ рдкрд┐рддрд╛рдЬреА рд╣реИ", рдЕрд░реНрдерд╛рддреНред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
Class2 рд╡рд░реНрдЧ рдХрд╛ рдПрдХ
рдЙрджрд╛рд╣рд░рдг InstDef рдЪрд░ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
public class RegisterAsPluginWithDefault { public IContainer Container; public RegisterAsPluginWithDefault() { Container = new Container(x => x.For<IClass>() .AddInstances(i => { i.Type(typeof (Class1)).Named("Class1"); i.Type(typeof (Class2)).Named("Class2"); }) .Use(new Class1()) ); } }
рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рд╣реЛрдЧрд╛:
IClass рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП Class1 рдирд╛рдордХ Class1 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ , Class2 рдХреЛ Class2 рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , Class1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ, рд▓реЗрдХрд┐рди рдЖрдк рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдХреНрд▓рд╛рд╕реЗрдЬ рдореЗрдВ <Class1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред > ())ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣
рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
var instanceDef = container.GetInstance<IClass>();
рддрдм рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ 1 рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреИрди
рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрдВрдЬреАрдХрд░рдг рд╣реЛрдЧреАред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 50! рдЗрди рд╕рднреА рдкрдВрдЬреАрдХрд░рдгреЛрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рднрд░рдирд╛ рдмрд╣реБрдд рджреБрдЦрдж рдФрд░ рдЙрдмрд╛рдК рд╣реЛрдЧрд╛ред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреЛрд░рдкрд╛рдЗрдк рдореЗрдВ рдПрдХ
рд╕реНрдХреИрди рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЙрди рдЕрд╕реЗрдВрдмрд▓реА рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреА рд╣реИ рдЬрд┐рдирдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ MEF рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд╕реНрдХреИрди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдЦреЛрдЬрдиреЗ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рдкреНрд░рдХрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ;
- рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ;
- рдПрдХрд╛рдзрд┐рдХ рдкрдВрдЬреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рд╕реНрдХреИрдирд┐рдВрдЧ рд╡рд┐рдзрд┐ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реНрдХреИрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо рдЬрд╛рджреВ рдХрд░реЗрдВ рдпрд╛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ;
- рдХреЙрд▓рд┐рдВрдЧ рдЕрд╕реЗрдВрдмрд▓реА рддрдХ рдкрд╣реБрдВрдЪреЗрдВ;
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ;
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрде рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдЬрдм рдЖрдкрдиреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рддреЛ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ / рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП
рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИред
рддреЛ, рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ:
public class RegisterByScan { public IContainer Container; public RegisterByScan() { Container = new Container(x => x.Scan(s => { s.AddAllTypesOf(typeof (IClass)); s.AssembliesFromPath("."); s.WithDefaultConventions(); s.LookForRegistries(); })); } }
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ IClass рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдореНрдореЗрд▓рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд╣реИред рдкрд╣рд▓реЗ, рд╕рдм рдХреБрдЫ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм рдЖрдкрдХреЛ
LookForRegistries рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреНрдпрд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдерд╛ред
private static string RegisterByScanExample() { var container = new RegisterByScan().Container; var instances = container.GetAllInstances<IClass>(); return container.WhatDoIHave(); }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧреЗрдЯ
рдСрд▓ рдЗрдВрд╕реНрдЯреИрдВрд╕ рд╡рд┐рдзрд┐ рдЕрдм рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрдВрдЬреАрдХреГрдд рд▓реЛрдЧреЛрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рдкрд╛рдЗрдк рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ" рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рд╣реИред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕реНрдХреИрди рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдкрд╛рдпрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЖрдкрдХреЛ рд╕реНрдХреИрди рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
public class RegisterByScanWithNaming { public IContainer Container; public RegisterByScanWithNaming() { Container = new Container(x => x.Scan(s => { s.AddAllTypesOf(typeof (IClass)).NameBy(t => t.Name); s.AssembliesFromPath("."); s.WithDefaultConventions(); s.LookForRegistries(); })); } }
AddAllTypesOf рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рдирд╛рдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд╛рдж, рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var instance = container.GetInstance<IClass>("Class1");
рдХреА рд╢реБрд░реВрдЖрдд
рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХрд╛ рдкреНрд░рджрд░реНрд╢рди:
private static string InjectExample() { var container = new RegisterAsPluginWithDefault().Container; var instance1 = container.GetInstance<IClass>("Class1"); var instance2 = container.GetInstance<IClass>("Class2"); var class1Inst = container.GetInstance<IClass>(); container.Inject(typeof (IClass), new Class2()); var class2Inst = container.GetInstance<IClass>(); return container.WhatDoIHave(); }
рд╣рдордиреЗ рдкрд╣рд▓реЗ RegisterAsPluginWithDefault рдХреНрд▓рд╛рд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХреА, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Class1 рдХреНрд▓рд╛рд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЗрдВрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ,
рдЖрдк рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреНрд▓рдЧрдЗрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдирдП рд╡рд░реНрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпреЗ рдЙрджрд╛рд╣рд░рдг рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдереЗ, рдЬрдм рдХрдХреНрд╖рд╛рдПрдВ рд╕реНрд╡рдпрдВ рд╕рд░рд▓ рд╣реЛрддреА рд╣реИрдВред рдЕрдЧрд▓реЗ рд╡рд┐рд╖рдп рдореЗрдВ, рд╣рдо рдЙрди рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╣реИрдВред
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПред