{"id":1211,"date":"2025-07-31T09:59:28","date_gmt":"2025-07-31T09:59:28","guid":{"rendered":"https:\/\/varnagame.site\/?p=1211"},"modified":"2026-02-25T09:23:45","modified_gmt":"2026-02-25T09:23:45","slug":"di-unity-zenject-%e2%9a%a1%ef%b8%8f-dependency-injection-%d0%b2-unity","status":"publish","type":"post","link":"https:\/\/varnagame.site\/?p=1211","title":{"rendered":"Unity \u0438 Zenject(Extenject)"},"content":{"rendered":"\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0442\u044c \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c 2-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e  \u0440\u0435\u0431\u044f\u0442\u0430\u043c\u0438 \u0438\u0437 &#8220;k-syndicate.school&#8221;  \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e (\u0437\u0430 \u0447\u0442\u043e \u0438\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e) \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435: <a href=\"https:\/\/www.youtube.com\/watch?v=mbuzSrKHBHI&amp;list=LL&amp;index=1&amp;t=4852s&amp;ab_channel=K-Syndicate\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=mbuzSrKHBHI&amp;list=LL&amp;index=1&amp;t=4852s&amp;ab_channel=K-Syndicate\">K-Syndicate<\/a>. <\/p>\n\n\n\n<p>ZENJECT&nbsp;(<em>\u043f\u043e\u0437\u0436\u0435 EXTENJECT<\/em>) &#8211; \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 Dependency Injection \u0432 \u0441\u0440\u0435\u0434\u0443 Unity. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438, \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 ZENJECT (EXTENJECT)<\/h3>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 Unity.  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 ZENJECT \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n\n\n\n<ol>\n<li> \u041a\u0430\u0447\u0430\u0435\u043c \u0441 \u0433\u0438\u0442\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <a href=\"https:\/\/github.com\/modesttree\/Zenject\/releases\">github Zenject<\/a> \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f 9.2.0. <\/li>\n\n\n\n<li> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c ZENJECT \u0438\u0437 Asset Store <a href=\"https:\/\/assetstore.unity.com\/packages\/tools\/utilities\/extenject-dependency-injection-ioc-157735?srsltid=AfmBOooryAwIo_jfmc7QQwJzH86YCu0U4bLTFQmjLCvj72ndMpt9LwAx#content\" data-type=\"link\" data-id=\"https:\/\/assetstore.unity.com\/packages\/tools\/utilities\/extenject-dependency-injection-ioc-157735?srsltid=AfmBOooryAwIo_jfmc7QQwJzH86YCu0U4bLTFQmjLCvj72ndMpt9LwAx#content\">AssetStore EXTENJECT<\/a><\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ZENJECT (EXTENJECT)<\/h3>\n\n\n\n<ol>\n<li><strong>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 ProjectContext<\/strong>:\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0444\u0430\u0431&nbsp;<code>ProjectContext<\/code>&nbsp;(<em>\u043e\u0431\u044b\u0447\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0435<\/em>&nbsp;<code>Resources<\/code>).<\/li>\n\n\n\n<li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442&nbsp;<code>ProjectContext<\/code>.<\/li>\n\n\n\n<li>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0438 (\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u0440\u0435\u043a\u043b\u0430\u043c\u044b)\u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a&nbsp;<code>Installers<\/code>&nbsp;\u043d\u0430&nbsp;<code>ProjectContext<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 SceneContext<\/strong>:\n<ul>\n<li>\u041d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442&nbsp;<code>SceneContext<\/code>.<\/li>\n\n\n\n<li>\u0412 \u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0435&nbsp;<code>Installers<\/code>&nbsp;\u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0446\u0435\u043d\u044b.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, <code>SceneContext<\/code> \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c ( \u0437\u0430\u0431\u0443\u0442\u0441\u0442\u0440\u0430\u043f\u0438\u0442\u044c )  \u0432\u0435\u0441\u044c ZENJECT \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n\n\n\n<p>\u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 <code>SceneContext<\/code> \u043e\u043d \u0438\u0449\u0435\u0442 <code>ProjectContext<\/code>, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>DontDestroyOnLoad<\/code>; \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438  \u0432 <code>ProjectContext<\/code> \u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f &#8220;Script Execution Order&#8221;)<\/p>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <code>ProjectContext<\/code> \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u0435\u0440\u043e\u0432.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"723\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1024x723.png\" alt=\"\" class=\"wp-image-1224\" style=\"width:384px;height:auto\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1024x723.png 1024w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-300x212.png 300w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-768x542.png 768w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image.png 1028w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u0418\u043d\u0441\u0442\u0430\u043b\u043b\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<br>\u041b\u0443\u0447\u0448\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0441 &#8220;Parent New Object Under Context&#8221;, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0447\u0442\u043e\u0431 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0431\u044b\u043b\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438  \u0434\u043b\u044f <code>ProjectContext<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0435\u0440\u043e\u0432<\/h3>\n\n\n\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0438<\/strong>&nbsp;(<em>Installers<\/em>):<\/p>\n\n\n\n<ul>\n<li>\u041a\u043b\u0430\u0441\u0441\u044b, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0442&nbsp;<code>MonoInstaller<\/code>&nbsp;(<em>\u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u0432 \u0441\u0446\u0435\u043d\u0435<\/em>) \u0438\u043b\u0438&nbsp;<code>Installer<\/code>&nbsp;(<em>\u0434\u043b\u044f \u043d\u0435-MonoBehaviour \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a<\/em>).<\/li>\n\n\n\n<li>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435&nbsp;<code>InstallBindings()<\/code>&nbsp;\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 (\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u0446\u0435\u043d\u044b, \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b).<\/li>\n\n\n\n<li><strong>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong>:\n<ul>\n<li><strong>\u041f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0435<\/strong>&nbsp;(<em>ProjectContex<\/em>): \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0439 \u043a \u043f\u0440\u0435\u0444\u0430\u0431\u0443&nbsp;<code>ProjectContext<\/code>&nbsp;(<em>\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435<\/em>). \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0446\u0435\u043d\u0430\u0445.&nbsp;<strong>\u0418\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/strong>&nbsp;(<em>\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435, \u0430\u0443\u0434\u0438\u043e, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0441\u0435\u0442\u044c<\/em>).<\/li>\n\n\n\n<li><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u043d\u044b\u0435<\/strong>&nbsp;(<em>SceneContext<\/em>): \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0439 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443&nbsp;<code>SceneContext<\/code>&nbsp;\u0432 \u0441\u0446\u0435\u043d\u0435. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0446\u0435\u043d\u0435. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ProjectContext \u0447\u0435\u0440\u0435\u0437&nbsp;<code>Container.Inherit = true<\/code>.<\/li>\n\n\n\n<li><strong>\u041f\u043e\u0434\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b<\/strong>&nbsp;(<em>SubContainers<\/em>): \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439&nbsp;<strong>\u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0446\u0435\u043d\u044b<\/strong>&nbsp;(<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f UI-\u043e\u043a\u043d\u0430<\/em>).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u0412 &#8220;Assets&#8221; \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 &#8220;Infrastructure&#8221;  \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441  BootstrapInstaller \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 MonoInstaller.  \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c InstallBindings() \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u0433\u0440\u044b. <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using Zenject;\npublic class BootstrapInstaller: MonoInstaller\n{\n    public override void InstallBindings()\n    {\n        \n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>BootstrapInstaller  \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432  <strong>ProjectContext<\/strong>  \u0438 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <br>\u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a &#8220;Mono Installers&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"1024\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1-886x1024.png\" alt=\"\" class=\"wp-image-1241\" style=\"width:325px;height:auto\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1-886x1024.png 886w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1-260x300.png 260w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1-768x888.png 768w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-1.png 898w\" sizes=\"(max-width: 886px) 100vw, 886px\" \/><\/figure>\n\n\n\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c <code>LocationInstaller<\/code> \u0438 \u0432\u0435\u0448\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 <strong>SceneContext<\/strong>.<br>\u0418\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0435\u0440\u0430, \u043e\u0434\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0441\u0446\u0435\u043d\u0435, \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442-1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0435\u0440\u043e\u044f \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0433\u0435\u0440\u043e\u044f  \u0432\u0440\u0430\u0433\u043e\u043c<br><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0433\u0435\u0440\u043e\u044f \u0438 \u0432\u0440\u0430\u0433\u0430 <\/h3>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431 \u043a\u0443\u0431\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c \u0433\u0435\u0440\u043e\u0435\u043c \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e &#8220;Hero&#8221; \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u0443\u0431\u0438\u043a\u0443 \u043a\u043b\u0430\u0441\u0441 HeroController \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0431\u0438\u043a\u0430 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>public class HeroController : MonoBehaviour\n{\n    public void ChangeLocalScale()\n    {\n        gameObject.transform.localScale = new Vector3(2, 2, 2);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p><br> \u0412 \u0441\u0446\u0435\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0439 <strong>\u043e\u0431\u044a\u0435\u043a\u0442<\/strong> &#8220;StartPoint&#8221;, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u0440\u043e\u044f. \u0412 LocationInstaller  \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 \u043f\u043e\u043b\u044f &#8220;public Transform StartPoint;&#8221; \u0438 public &#8220;GameObject HeroPrefab;&#8221;  \u0438 \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0435\u043c \u043d\u0430 \u043d\u0438\u0445 &#8220;Hero&#8221; \u0438 &#8220;StartPoint&#8221;,<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"1024\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-2-534x1024.png\" alt=\"\" class=\"wp-image-1247\" style=\"width:279px;height:auto\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-2-534x1024.png 534w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-2-157x300.png 157w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-2.png 650w\" sizes=\"(max-width: 534px) 100vw, 534px\" \/><\/figure>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c <strong>\u0412\u0440\u0430\u0433\u0430<\/strong>.  \u0427\u0442\u043e\u0431 \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0440  \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e &#8220;enemy&#8221; \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 EnemyController  (\u043f\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e\u0439).<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e  ZENJECT<\/h3>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e, \u0447\u0442\u043e\u0431 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u0440\u043e\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<br>\u0412 \u043a\u043b\u0430\u0441\u0441 LocationInstaller \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 <br><strong>Container.InstantiatePrefabForComponent&lt;HeroController&gt;(HeroPrefab, StartPoint.position, Quaternion.identity, null);<\/strong><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using Zenject;\npublic class LocationInstaller : MonoInstaller\n{\n    public Transform StartPoint;\n    public GameObject HeroPrefab;\n    public override void InstallBindings()\n    {\n        HeroController heroController = Container\n            .InstantiatePrefabForComponent&lt;HeroController&gt;(HeroPrefab, StartPoint.position, Quaternion.identity, null);\n    }<\/code><\/pre><\/div>\n\n\n\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0446\u0435\u043d\u044b \u043d\u0430\u0448 \u043a\u0443\u0431\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f  \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430.<\/p>\n\n\n\n<p><strong>HeroController heroController = Container<br>.InstantiatePrefabForComponent(HeroPrefab, StartPoint.position, Quaternion.identity, null);<\/strong><br>\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0438 \u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 &#8220;<strong>HeroController<\/strong>&#8220;. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Binding<\/em><\/h3>\n\n\n\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c &#8220;\u0431\u0438\u043d\u0434\u0438\u0442\u044c&#8221;  \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442  \u043a\u0443\u0431\u0430 &#8220;<strong>HeroController<\/strong>&#8220;.<\/p>\n\n\n\n<p><strong>\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430<\/strong>&nbsp;(<em>Binding<\/em>): \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<br>\u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0434\u0430\u0442\u044c &#8220;\u043f\u043e \u0442\u0438\u043f\u0443&#8221;  \u044d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<br>\u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u0438\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 ( \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u043f\u0443\u0442 \u043f\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b)<\/p>\n\n\n\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b bind \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u0438 \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>Container.Bind&lt;ContractType&gt;()\n    .WithId(Identifier)\n    .To&lt;ResultType&gt;()\n    .FromConstructionMethod()\n    .AsScope()\n    .WithArguments(Arguments)\n    .OnInstantiated(InstantiatedCallback)\n    .When(Condition)\n    .(Copy|Move)Into(All|Direct)SubContainers()\n    .NonLazy()\n    .IfNotBound();<\/code><\/pre><\/div>\n\n\n\n<ul>\n<li><strong>ContractType<\/strong>&nbsp;= \u0422\u0438\u043f, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443.\n<ul>\n<li>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u0443 \u0432\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043f\u043e\u043b\u044f\/\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>ResultType<\/strong>&nbsp;= \u0422\u0438\u043f \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438.\n<ul>\n<li>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:&nbsp;<strong>ContractType<\/strong><\/li>\n\n\n\n<li>\u042d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d&nbsp;<strong>ContractType<\/strong>&nbsp;\u0438\u043b\u0438 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c \u043e\u0442&nbsp;<strong>ContractType<\/strong>&nbsp;. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f ToSelf(), \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e&nbsp;<strong>ResultType<\/strong>&nbsp;\u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c \u0436\u0435, \u043a\u0430\u043a&nbsp;<strong>ContractType<\/strong>&nbsp;. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435&nbsp;<strong>ConstructionMethod<\/strong>&nbsp;, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Identifier<\/strong>&nbsp;= \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0434\u043b\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0442\u0438\u043f\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.&nbsp;\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c.&nbsp;<a href=\"https:\/\/github.com\/modesttree\/Zenject#identifiers\">\u0437\u0434\u0435\u0441\u044c .<\/a><\/li>\n\n\n\n<li><strong>ConstructionMethod<\/strong>&nbsp;= \u041c\u0435\u0442\u043e\u0434&nbsp;\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\/\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430&nbsp;<strong>ResultType<\/strong>&nbsp;. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043c. \u0432&nbsp;<a href=\"https:\/\/github.com\/modesttree\/Zenject#construction-methods\">\u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 .<\/a>\n<ul>\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromNew<\/strong>&nbsp;\u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 new \u0432 C#. \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/li>\n\n\n\n<li><strong><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code>FromGetter<\/strong><\/li>\n\n\n\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromMethod<\/strong> \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430<\/li>\n\n\n\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromResolve<\/strong> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043f\u0443\u0442\u0451\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 DiContainer.Resolve()). \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e ResultType \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. <\/li>\n\n\n\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromComponentInNewPrefab<\/strong> \u2014 \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430<\/li>\n\n\n\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromSubContainerResolve<\/strong> \u2014 \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0434\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043f\u043e\u0434\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a ResultType.<\/li>\n\n\n\n<li><code><strong>Bind&lt;ContractType&gt;().<\/strong><\/code><strong>FromInstance<\/strong> \u2014 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440.<\/li>\n\n\n\n<li><code><strong>Bind&lt;<code><strong>ContractType<\/strong><\/code>&gt;().<\/strong><\/code><strong>FromComponentInHierarchy();<\/strong>&nbsp;&#8211; \u041d\u0430\u0439\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0438\u043f\u0430&nbsp;<code><code><code>ContractType<\/code><\/code><\/code>&nbsp;\u043d\u0430 \u0441\u0446\u0435\u043d\u0435.<\/li>\n\n\n\n<li>etc.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Scope<\/strong>&nbsp;<strong>(\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/strong>) = \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e (\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435) \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f\u0445. \n<ul>\n<li>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: AsTransient. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0438, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u2014 \u044d\u0442\u043e \u043b\u044e\u0431\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0438\u0441\u043a, \u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u043d\u0443\u043b\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, FromMethod, FromComponentX, FromResolve \u0438 \u0442. \u0434.).<\/li>\n\n\n\n<li>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e::\n<ol>\n<li><strong>AsTransient<\/strong>&nbsp;\u2013 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435&nbsp;<strong>ContractType<\/strong>&nbsp;DiContainer \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/li>\n\n\n\n<li><strong>AsCached<\/strong>&nbsp;\u2013 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440&nbsp;<strong>ResultType<\/strong>&nbsp;\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435&nbsp;<strong>ContractType<\/strong>&nbsp;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u043d\u0438\u0432\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.<\/li>\n\n\n\n<li><strong>AsSingle<\/strong>&nbsp;\u2013 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 AsCached, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0434\u043b\u044f&nbsp;<strong>ResultType<\/strong>&nbsp;\u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 . \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e&nbsp;<strong>ResultType<\/strong>&nbsp;\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 AsSingle \u0441 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0432 \u043f\u043e\u0434\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AsSingle, \u043e\u0434\u043d\u0430\u043a\u043e AsTransient \u0438 AsCached \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Arguments<\/strong>&nbsp;= \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0442\u0438\u043f\u0430&nbsp;<strong>ResultType<\/strong>&nbsp;. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u0434\u043b\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0435 <code>Container.BindInstance(arg).WhenInjectedInto&lt;ResultType&gt;()<\/code><\/li>\n\n\n\n<li><strong>InstantiatedCallback<\/strong>&nbsp;= \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0435\u0433\u043e \u0442\u0438\u043f\u043e\u0432. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 OnInstantiated, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440. <\/li>\n<\/ul>\n\n\n\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044e InstallBindings() \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443:<br><strong> Container.Bind&lt;HeroController&gt;().FromInstance(heroController).AsSingle();<\/strong><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing Zenject;\nnamespace Infrastructure\n{\n    public class LocationInstaller : MonoInstaller\n    {\n        public GameObject HeroPrefab;\n\n        public override void InstallBindings()\n        {\n            HeroController heroController = Container\n                .InstantiatePrefabForComponent&lt;HeroController&gt;(HeroPrefab,\n                    StartPoint.position, Quaternion.identity,\n                    null);\n\n            Container\n                .Bind&lt;HeroController&gt;()\n                .FromInstance(heroController)\n                .AsSingle();\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0442\u0443\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b <br><strong>.AsSingle()<\/strong> &#8211; \u043a\u0430\u043a \u0438 .AsCached() \u043d\u043e \u043a\u0430\u043a \u0438 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043f\u0448\u0435\u043d \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c  \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u0442\u0438\u043f\u0443.<br><strong>.AsCached()<\/strong> &#8211; \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0434\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<br><strong>.AsTransient()<\/strong> &#8211; \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 (\u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 &#8211; \u0441\u043e\u0437\u0434\u0430\u043b\u0438 &#8211; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 &#8211; \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043b\u0438).<br>.<strong>NonLazy()<\/strong>&#8211; \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u0430 \u043d\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435. \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0442\u0438\u043f\u0430  \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u044f. <br>( <strong>Container.Bind().FromInstance(heroController).AsSingle() .NonLazy()<\/strong> )<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435<\/strong>&nbsp;(<em>Injection<\/em>):<\/h3>\n\n\n\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438  HeroController \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u043a\u043e\u0434\u0430 \u0432\u0440\u0430\u0433\u0430.<br>\u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u043c \u0432 MonoBehaviour \u0442\u043e <br>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <em>\u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c<\/em>&nbsp;<code>[Inject]<\/code><\/p>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043d\u0436\u0435\u043a\u0446\u0438\u044e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 EnemyController<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing Zenject;\n\npublic class EnemyController : MonoBehaviour\n{\n    [Inject]\n    private void Construct(HeroController heroController)\n    {\n        heroController.ChangeLocalScale();\n    }\n} <\/code><\/pre><\/div>\n\n\n\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0446\u0435\u043d\u044b \u0432\u0440\u0430\u0433 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 <strong>\u0433\u0435\u0440\u043e\u044f<\/strong> \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430,  \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0435\u0440\u043e\u044f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u041a\u043e\u0433\u0434\u0430 <code>[Inject]<\/code> \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443 <code>MonoBehaviour<\/code><\/h3>\n\n\n\n<ol>\n<li><strong>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u044b\u043b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432 \u0441\u0446\u0435\u043d\u0435<\/strong> (\u043d\u0435 \u043f\u0440\u0435\u0444\u0430\u0431, \u0430 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0446\u0435\u043d\u0435).\n<ul>\n<li>Zenject \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0446\u0435\u043d\u044b \u00ab\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f\u00bb \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c <code>Inject()<\/code>.<\/li>\n\n\n\n<li>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>Construct()<\/code> \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0447\u0435\u0440\u0435\u0437 <code>Container.Instantiate()<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u0437 <code>Context<\/code> (SceneContext, ProjectContext, GameObjectContext)<\/strong>.\n<ul>\n<li>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0442\u043e\u0436\u0435 \u00ab\u043f\u0440\u043e\u0439\u0434\u0451\u0442\u0441\u044f\u00bb \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u041a\u043e\u0433\u0434\u0430 <code>[Inject]<\/code> \u041d\u0415 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n\n\n\n<ul>\n<li>\u0415\u0441\u043b\u0438 \u0442\u044b \u0441\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u043b <code>new SomeClass()<\/code> \u2192 Zenject \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/li>\n\n\n\n<li>\u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043b <code>GameObject.Instantiate(prefab)<\/code> \u0438 <strong>\u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043b \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/strong> <code>_container.InjectGameObject(go)<\/code>.<\/li>\n\n\n\n<li>\u0415\u0441\u043b\u0438 <code>MonoBehaviour<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0447\u0435\u0440\u0435\u0437 <code>gameObject.AddComponent&lt;MyComponent&gt;()<\/code> (\u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u0435\u043d <code>Inject<\/code>).<\/li>\n<\/ul>\n\n\n\n<p><br><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442-2.  <em>Binding<\/em> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0446\u0435\u043d\u044b \u0438  <em>Injection<\/em> \u0432 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u043e\u0431\u044a\u0435\u043a\u0442<\/h2>\n\n\n\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0435\u0440\u043e\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c) \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0433\u0435\u0440\u043e\u044e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0442\u0443\u0434\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <br><\/p>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 UI \u043f\u0430\u043d\u0435\u043b\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u043d\u0435\u0451 \u0442\u0440\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f.  UI \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <code>InventoryDisplay<\/code><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing TMPro;\npublic class InventoryDisplay : MonoBehaviour\n{\n    public TMP_Text[] HotbarSlots;\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0435\u043c \u043d\u0430 <code>TMP_Text[] <\/code> \u0442\u0440\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0431\u0438\u043d\u0434\u0438\u043c InventoryDisplay \u0432 <code>LocationInstaller<\/code> <\/h3>\n\n\n\n<p>\u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0432 <code>LocationInstaller<\/code> \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c <code>InventoryDisplay<\/code> UI \u043f\u0430\u043d\u0435\u043b\u0438<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code> public InventoryDisplay inventoryDisplay;<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>            Container\n                .Bind&lt;InventoryDisplay&gt;()\n                .FromInstance(inventoryDisplay)\n                .AsSingle();<\/code><\/pre><\/div>\n\n\n\n<p>\u043f\u043e\u043b\u043d\u044b\u0439  <code>LocationInstaller<\/code> \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing Zenject;\nnamespace Infrastructure\n{\n    public class LocationInstaller : MonoInstaller\n    {\n        public Transform StartPoint;\n        public GameObject HeroPrefab;\n\n        public InventoryDisplay inventoryDisplay;\n\n        public override void InstallBindings()\n        {\n            BindInventoryDisplay();\n            BindHero();\n        }\n\n        private void BindInventoryDisplay()\n        {\n            Container\n                .Bind&lt;InventoryDisplay&gt;()\n                .FromInstance(inventoryDisplay)\n                .AsSingle();\n        }\n\n        private void BindHero()\n        {\n            HeroController heroController = Container\n                .InstantiatePrefabForComponent&lt;HeroController&gt;(HeroPrefab, StartPoint.position, Quaternion.identity,\n                    null);\n\n            Container\n                .Bind&lt;HeroController&gt;()\n                .FromInstance(heroController)\n                .AsSingle();\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441  \u0433\u0435\u0440\u043e\u044f <code>HeroController<\/code>, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0430\u043c \u043a\u0430\u0448\u0443 \u0438 \u0434\u043b\u044f \u0433\u0435\u0440\u043e\u044f \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c <code>CharacterInventory<\/code><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using Zenject;\nusing UnityEngine;\nusing UnityEngine.UI;\nusing TMPro;\n\nnamespace Infrastructure\n{\n    public class CharacterInventory : MonoBehaviour\n    {\n        TMP_Text[] HotbarDisplayHolders = new TMP_Text[3];\n\n        [Inject]\n        public void Construct(InventoryDisplay inventoryDisplay)\n        {\n            HotbarDisplayHolders = inventoryDisplay.HotbarSlots;\n        }\n\n        void Start()\n        {\n            HotbarDisplayHolders[1].text = &quot;\u0433\u0435\u0440\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0442\u0435\u043a\u0441\u0442&quot;;\n        }\n\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u043a\u0430\u043a  \u0433\u0435\u0440\u043e\u0439 \u0432\u043d\u0435\u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432  \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"360\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-4.png\" alt=\"\" class=\"wp-image-1368\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-4.png 600w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-4-300x180.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442-3.  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 ProjectContext<\/h2>\n\n\n\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f  \u0441\u043e\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f  <code>ProjectContext.<\/code><br>\u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435  <code>ProjectContext<\/code> \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u043c, \u0442\u0430\u043a \u044d\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <code>InputService<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u0432\u043e\u0434.  \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0447\u0442\u043e\u0431 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0432\u043e\u0434 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435. \u0421\u0435\u0440\u0432\u0438\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0430\u0440\u0443 <code>event Action<\/code> \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u0435\u0440\u043e\u0439. \u0423\u0441\u043b\u043e\u0436\u043d\u0438\u043c  \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u0435\u043c \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 <strong>\u041d\u0415<\/strong> <code>MonoBehaviour<\/code><br><br>\u041f\u0435\u0440\u0432\u044b\u043c  \u0434\u0435\u043b\u043e\u043c  \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441  <code>IInputService<\/code>  \u0441 \u0434\u0432\u0443\u043c\u044f  <code>event Action ClickOne <\/code>\u0438 ClickTwo<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using System;\n\npublic interface IInputService\n{\n    event Action ClickOne;\n    event Action ClickTwo;\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c  \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a <code>KeyboardInput<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0438 \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c, \u0440\u0435\u0448\u0438\u0432 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0435\u0437  <code>MonoBehaviour<\/code>, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. <strong>\u0412 Unity \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b (<code>Input.GetKey<\/code>, <code>Input.GetKeyDown<\/code>, <code>Input.GetKeyUp<\/code>) \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Unity \u0441\u0430\u043c\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 (<code>Update<\/code>, <code>LateUpdate<\/code>, <code>OnGUI<\/code> \u0438 \u0442.\u0434.) \u0432 MonoBehaviour.<\/strong><br>\u0427\u0442\u043e\u0431 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u043e\u0439\u0434\u0435\u043c \u043d\u0430 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c. \u0412 \u043a\u043b\u0430\u0441\u0441\u0435 KeyboardInput \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434 Tick() \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ITickable. Tick() &#8211; \u0430\u043d\u0430\u043b\u043e\u0433  Update(). \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>Action ClickOne<\/code> \u0438 <code>ClickTwo<\/code> \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 &#8220;\u0410&#8221; \u0438 &#8220;B&#8221;<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using System;\nusing System.Linq;\nusing UnityEngine;\nusing UnityEngine.LowLevel;\npublic class KeyboardInput : IInputServi\u0441e, ITickable\n{\n    public event Action ClickOne;\n    public event Action ClickTwo;\n\n    public void Tick()\n    {\n        if (Input.GetKey(KeyCode.A))\n        {\n            ClickOne?.Invoke();\n        }\n        if (Input.GetKey(KeyCode.B))\n        {\n            ClickTwo?.Invoke();\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p><strong>\u0411\u0438\u043d\u0434\u0438\u043c KeyboardInput \u0432 BootstrapInstaller<\/strong> \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432 \u043e\u0431\u044c\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>KeyboardInput<\/code> \u0431\u0438\u043d\u0434\u0438\u043c  \u0441 .<strong>NonLazy()<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0442\u0438\u043c \u0447\u0442\u043e\u0431 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043b\u0441\u044f \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ITickable \u0432 keyboardInput ,  \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c Tick() \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0442\u043e\u0432  \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0442\u0430\u043a \u043a\u0430\u043a \u0432 <code>KeyboardInput<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0446\u0438\u044f  \u0432\u0438\u0434\u0430 <code>\u0445\u0445\u0445\u0445\u0445\u0445?.Invoke().<\/code><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using Zenject;\npublic class BootstrapInstaller : MonoInstaller\n{\n    KeyboardInput keyboardInput;\n    public override void InstallBindings()\n    {\n        keyboardInput = new KeyboardInput();\n\n        Container\n            .Bind&lt;IInputServi\u0441e&gt;()\n            .FromInstance(keyboardInput)\n            .AsSingle()\n            .NonLazy();\n            \n        Container\n            .Bind&lt;ITickable&gt;()\n            .FromInstance(keyboardInput)\n            .AsSingle()\n            .NonLazy();\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p><strong>\u0418\u043d\u0436\u0435\u043a\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 HeroController<\/strong>  \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<br>\u041f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 <code>ClickOne<\/code> \u0431\u0443\u0434\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0433\u0435\u0440\u043e\u044f. \u041f\u0440\u0438 <code>ClickTwo<\/code> &#8211; \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0433\u0435\u0440\u043e\u044f,<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing Zenject;\npublic class HeroController : MonoBehaviour\n{\n    IInputServi\u0441e _inputServi\u0441e;\n\n    [Inject]\n    public void Construct(IInputServi\u0441e inputServi\u0441e)\n    {\n        _inputServi\u0441e = inputServi\u0441e;\n        _inputServi\u0441e.ClickOne += ClickOne;\n        _inputServi\u0441e.ClickTwo += ClickTwo;\n    }\n\n    private void ClickOne()\n    {\n        gameObject.transform.localScale = new Vector3(1, 1, 1);\n    }\n\n    private void ClickTwo() \n    { \n        gameObject.transform.localScale = new Vector3(3, 3, 3); \n    }\n\n\n    public void ChangeLocalScale()\n    {\n        gameObject.transform.localScale = new Vector3(2, 2, 2);\n    }\n\n    void OnDestroy()\n    {\n        _inputServi\u0441e.ClickOne -= ClickOne;\n        _inputServi\u0441e.ClickTwo -= ClickTwo;\n    }\n}\n<\/code><\/pre><\/div>\n\n\n\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0433\u0435\u0440\u043e\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 &#8220;\u0410&#8221; \u0438 &#8220;\u0412&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"962\" height=\"360\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.39.07.png\" alt=\"\" class=\"wp-image-1408\" style=\"width:360px;height:auto\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.39.07.png 962w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.39.07-300x112.png 300w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.39.07-768x287.png 768w\" sizes=\"(max-width: 962px) 100vw, 962px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"956\" height=\"376\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.38.56.png\" alt=\"\" class=\"wp-image-1410\" style=\"width:358px;height:auto\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.38.56.png 956w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.38.56-300x118.png 300w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/\u0421\u043d\u0438\u043c\u043e\u043a-\u044d\u043a\u0440\u0430\u043d\u0430-2025-08-12-\u0432-19.38.56-768x302.png 768w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/figure>\n\n\n\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u0432\u0432\u043e\u0434\u0430 \u0432\u043d\u043e\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043b\u0438\u0448 \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 &#8211; <code>BootstrapInstaller<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442-4. \u0424\u0430\u0431\u0440\u0438\u043a\u0430<\/h2>\n\n\n\n<p>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c <strong>\u0441\u0444\u0435\u0440\u0443-\u0432\u0440\u0430\u0433\u0430<\/strong>  \u0432  <strong>EnemyMelee<\/strong>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043f\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c  \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c <strong>EnemyRange<\/strong>.<br>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c <code>enum<\/code> c \u0432\u0440\u0430\u0433\u0430\u043c\u0438.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>public enum EnemyType\n{\n    Melee = 0,\n    ranged = 1\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0437 \u0432\u0440\u0430\u0433\u043e\u0432 \u043f\u0440\u0435\u0444\u0430\u0431\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u043c \u0438\u0445 \u0441\u043e \u0441\u0446\u0435\u043d\u044b. \u041d\u0430 \u0441\u0446\u0435\u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u0432\u0440\u0430\u0433\u043e\u0432.<br>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438  <code>EnemyMarker<\/code>  \u0438 <code>EnemyMarker1<\/code>. \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0438\u0445 \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0430\u0433\u043e\u0432  \u0438  \u043f\u043e\u0432\u0435\u0441\u0438\u043c \u043d\u0430 \u043d\u0438\u0445 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>EnemyMarker<\/code>.  \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 <code>Gizmos<\/code> \u043a\u0440\u0430\u0441\u043d\u0443\u044e \u0441\u0444\u0435\u0440\u0443 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0443\u044e \u0432\u0440\u0430\u0433\u0430.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\n\npublic class EnemyMarker : MonoBehaviour\n{\n    public EnemyType enemyType;\n    private void OnDrawGizmos()\n    {\n        Gizmos.color = Color.red;\n        Gizmos.DrawSphere(transform.position, 1);\n        Gizmos.color = Color.white;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 Enemys<\/h3>\n\n\n\n<p>\u0412 ZENJECT \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0438, \u043d\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u044e.<br>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441 <code>EmenyFactory<\/code>   \u041e\u043d  \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431\u044b \u0432\u0440\u0430\u0433\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0440\u0430\u0433\u043e\u0432 \u0438\u0437  \u043f\u0440\u0435\u0444\u0430\u0431\u043e\u0432. <code>EmenyFactory<\/code> \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0441\u044f \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 I<code>EmenyFactory<\/code>.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\n\npublic interface IEnemyFactory\n{\n    void Create(EnemyType enemyType, Vector3 at);\n    void Load();\n}\n\n\npublic class EnemyFactory : IEnemyFactory\n{\n    public Object _meleeEnemyPrefab;\n    public Object _rangeEnemyPrefab;\n\n    public EnemyFactory(DiContainer diContainer)\n    {\n        _diContainer = diContainer;\n    }\n\n    public void Load() {}\n    public void Create(EnemyType enemyType, Vector3 at) { }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a <code>LocationInstaller.<\/code><br>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432 <code>InstallBindings()<\/code>, \u043d\u043e  \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<br><\/p>\n\n\n\n<p><code>InstallBindings()<\/code> \u2014 \u044d\u0442\u043e <strong>\u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/strong>, \u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0438\u0433\u0440\u044b.<\/p>\n\n\n\n<p><br><strong>\u0412 \u043d\u0451\u043c:<\/strong><\/p>\n\n\n\n<ul>\n<li>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 <code>(Bind, FromComponentInHierarchy, To&lt;&gt;()<\/code> \u0438 \u0442.\u0434.)<\/li>\n\n\n\n<li><strong>\u041d\u043e<\/strong> \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043c\u0438\u0440 \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0434\u043e \u043a\u043e\u043d\u0446\u0430: \u0441\u0446\u0435\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 <code>MonoBehaviour<\/code> \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0440\u0438\u0441\u043a\u0443\u0435\u043c:<\/strong><\/p>\n\n\n\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0430\u0433\u043e\u0432 <strong>\u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0446\u0435\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430\u0441\u044c<\/strong><\/li>\n\n\n\n<li>\u0421\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0438\u043b\u0438 \u0435\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u044b<\/li>\n\n\n\n<li>\u041f\u043e\u0439\u043c\u0430\u0442\u044c <code>NullReferenceException<\/code><\/li>\n<\/ul>\n\n\n\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0432 <code>LocationInstaller<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0443\u0439\u0441 <code>IInitializable<\/code>.<\/p>\n\n\n\n<p><code>IInitializable<\/code> \u2014 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, <code>void Initialize().<\/code><\/p>\n\n\n\n<p>Zenject <strong>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>Initialize()<\/code> \u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 <code>IInitializable<\/code><\/strong> \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a:<\/p>\n\n\n\n<ul>\n<li>\u0412\u0441\u0435<strong> <\/strong><code>InstallBindings()<\/code> \u0432\u043e \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b<\/li>\n\n\n\n<li>\u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u044b<\/li>\n\n\n\n<li>\u0421\u0446\u0435\u043d\u0430 \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0431\u0440\u0430\u043d\u044b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 <code>Initialize()<\/code>:<\/strong><\/p>\n\n\n\n<ul>\n<li>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432, \u0432\u0441\u0435 <code>EnemyMarker<\/code> \u0432 \u0441\u0446\u0435\u043d\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.<\/li>\n\n\n\n<li>\u0424\u0430\u0431\u0440\u0438\u043a\u0430 <code>enemyFactory<\/code> \u0443\u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.<\/li>\n\n\n\n<li>\u041c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c <code>EnemyMarker<\/code> \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0430\u0433\u043e\u0432.<\/li>\n<\/ul>\n\n\n\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e <strong>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/strong>.<\/p>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438, \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>InstallBindings()<\/code><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code> Container.Bind&lt;IEnemyFactory&gt;().To&lt;EnemyFactory&gt;().AsSingle();<\/code><\/pre><\/div>\n\n\n\n<p>\u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435:<br>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0430\u043b\u0431\u0435\u043a\u0430 <code>Initialize()<\/code> \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432, \u0432\u0441\u0435 <code>EnemyMarker<\/code> \u0432 \u0441\u0446\u0435\u043d\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u0424\u0430\u0431\u0440\u0438\u043a\u0430 <code>enemyFactory<\/code> \u0443\u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430. <\/p>\n\n\n\n<p>\u0412 <code>Initialize()<\/code>  \u0437\u0430\u0440\u0435\u0441\u043e\u043b\u0432\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431\u044b \u0432\u0440\u0430\u0433\u043e\u0432 \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0443. \u041f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u043f\u043e \u041c\u0430\u0440\u043a\u0435\u0440\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f Enemy.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>  public void Initialize()\n    {\n        \/\/ DiContainer.Resolve \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443\n        \/\/ \u044d\u0442\u043e\u0442 \u043a\u043e\u0434\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u043b\u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0443\n        var enemyFactory = Container.Resolve&lt;IEnemyFactory&gt;();\n        enemyFactory.Load();\n\n        foreach (EnemyMarker marker in EnemyMarkers)\n        {\n            enemyFactory.Create(marker.enemyType, marker.transform.position);\n        }\n    }<\/code><\/pre><\/div>\n\n\n\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434 <code>InstallBindings()<\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code>LocationInstaller<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c  \u043a\u043e\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u043c \u0441\u0430\u043c <code>LocationInstaller<\/code>  (\u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0435)<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code> Container.BindInterfacesTo&lt;LocationInstaller&gt;().FromInstance(this).AsSingle();<\/code><\/pre><\/div>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u0441\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0432 <code>LocationInstaller<\/code>  \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 <code>EnemyFactory<\/code>.<br>\u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u0440\u0435\u0444\u0430\u0431\u043e\u0432.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code> public void Load()\n    {\n        _meleeEnemyPrefab = Resources.Load(PathEnemyMelee);\n        _rangeEnemyPrefab = Resources.Load(PathEnemyRange);\n    }<\/code><\/pre><\/div>\n\n\n\n<p>\u0418\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c Enemy \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0431\u0443\u0434\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0431\u0438\u043d\u0434\u0435\u043d\u043e\u0433\u043e <code>LocationInstaller<\/code>.<br><strong>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 <code>EnemyFactory<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/strong><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>  public EnemyFactory(DiContainer diContainer)\n    {\n        _diContainer = diContainer;\n    }<\/code><\/pre><\/div>\n\n\n\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0425\u0410\u041a\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0430\u0433\u043e\u0432 \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044a\u044e  diContainer.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>public void Create(EnemyType enemyType, Vector3 at)\n    {\n        switch (enemyType)\n        {\n            case EnemyType.Melee:\n                _diContainer.InstantiatePrefab(_meleeEnemyPrefab, at, Quaternion.identity, null);\n                break;\n            case EnemyType.Ranged:\n                _diContainer.InstantiatePrefab(_rangeEnemyPrefab, at, Quaternion.identity, null);\n                break;\n        }\n\n    }<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 IEnemyFactory:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using UnityEngine;\nusing Zenject;\n\npublic class EnemyFactory : IEnemyFactory\n{\n    private const string PathEnemyMelee = &quot;EnemyMelee&quot;;\n    private const string PathEnemyRange = &quot;EnemyRange&quot;;\n    private readonly DiContainer _diContainer;\n    public Object _meleeEnemyPrefab;\n    public Object _rangeEnemyPrefab;\n\n    public EnemyFactory(DiContainer diContainer)\n    {\n        _diContainer = diContainer;\n    }\n\n    public void Load()\n    {\n        _meleeEnemyPrefab = Resources.Load(PathEnemyMelee);\n        _rangeEnemyPrefab = Resources.Load(PathEnemyRange);\n\n    }\n    public void Create(EnemyType enemyType, Vector3 at)\n    {\n        switch (enemyType)\n        {\n            case EnemyType.Melee:\n                _diContainer.InstantiatePrefab(_meleeEnemyPrefab, at, Quaternion.identity, null);\n                break;\n            case EnemyType.Ranged:\n                _diContainer.InstantiatePrefab(_rangeEnemyPrefab, at, Quaternion.identity, null);\n                break;\n        }\n\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 LocationInstaller<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>\nusing UnityEngine;\nusing Zenject;\npublic class LocationInstaller : MonoInstaller, IInitializable\n{\n    public Transform StartPoint;\n    public GameObject HeroPrefab;\n    public EnemyMarker[] EnemyMarkers;\n\n    public InventoryDisplay inventoryDisplay;\n\n    public override void InstallBindings()\n    {\n        BindInstallerInterfaces(); \/\/ LocationInstaller \u0431\u0438\u043d\u0434\u0438\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f\n        BindInventoryDisplay();\n        BindHero();\n        BindEmenyFactory();\n    }\n\n    private void BindEmenyFactory()\n    {\n        Container\n            .Bind&lt;IEnemyFactory&gt;()\n            .To&lt;EnemyFactory&gt;()\n            .AsSingle();\n    }\n\n    private void BindInstallerInterfaces()\n    {\n        Container.BindInterfacesTo&lt;LocationInstaller&gt;().FromInstance(this).AsSingle();\n    }\n\n    private void BindInventoryDisplay()\n    {\n        Container\n            .Bind&lt;InventoryDisplay&gt;()\n            .FromInstance(inventoryDisplay)\n            .AsSingle();\n    }\n\n    private void BindHero()\n    {\n        HeroController heroController = Container\n            .InstantiatePrefabForComponent&lt;HeroController&gt;(HeroPrefab, StartPoint.position, Quaternion.identity,\n                null);\n\n        Container\n            .Bind&lt;HeroController&gt;()\n            .FromInstance(heroController)\n            .AsSingle();\n    }\n    \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043d\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0443\u0442, \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0444\u0430\u0431\u0440\u0438\u043a \u0438 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0437\u043e\u043b\u0432\u0430\n    public void Initialize()\n    {\n        \/\/ DiContainer.Resolve \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443\n        \/\/ \u044d\u0442\u043e\u0442 \u043a\u043e\u0434\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u043b\u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0443\n        var enemyFactory = Container.Resolve&lt;IEnemyFactory&gt;();\n        enemyFactory.Load();\n\n        foreach (EnemyMarker marker in EnemyMarkers)\n        {\n            enemyFactory.Create(marker.enemyType, marker.transform.position);\n        }\n    }\n}\n<\/code><\/pre><\/div>\n\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0432 \u043f\u043e\u043b\u044f LocationInstaller \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0435\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u0432\u0440\u0430\u0433\u043e\u0432,\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0441\u044f \u0432\u0440\u0430\u0433\u0438 (\u0448\u0430\u0440\u044b) \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"1024\" src=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5-930x1024.png\" alt=\"\" class=\"wp-image-1499\" srcset=\"https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5-930x1024.png 930w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5-273x300.png 273w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5-768x846.png 768w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5-1024x1127.png 1024w, https:\/\/varnagame.site\/wp-content\/uploads\/2025\/08\/image-5.png 1308w\" sizes=\"(max-width: 930px) 100vw, 930px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>public override void InstallBindings()\n{\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\n    Container.Bind&lt;Foo&gt;().AsTransient();\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 IFoo\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().AsTransient();\n\n    \/\/ \u041d\u0435\u0433eneric-\u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435\n    Container.Bind(typeof(IFoo)).To(typeof(Foo)).AsTransient();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ AsSingle\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0433\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\n    Container.Bind&lt;Foo&gt;().AsSingle();\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 IFoo\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().AsSingle();\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0438\u043f\u0430\u043c\n    \/\/ \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0442\u0438\u043f\u043e\u0432\n    \/\/ (\u0434\u043b\u044f \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0433eneric-\u0432\u0435\u0440\u0441\u0438\u044e Bind)\n    Container.Bind(typeof(Foo), typeof(IFoo), typeof(IFoo2)).To&lt;Foo&gt;().AsSingle();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ BindInterfaces\n\n    \/\/ \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442, \u0447\u0442\u043e \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u044b\u0448\u0435\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 Foo, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0430\u043c Foo \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0443 \u0442\u0438\u043f\u0430 Foo\n    Container.BindInterfacesAndSelfTo&lt;Foo&gt;().AsSingle();\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 Foo, \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 Foo\n    \/\/ \u041f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f\n    Container.BindInterfacesTo&lt;Foo&gt;().AsSingle();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromInstance\n\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f Foo\n    \/\/ \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 FromInstance \u043d\u0435\u0442\n    Container.Bind&lt;Foo&gt;().FromInstance(new Foo());\n\n    \/\/ \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438\n    \/\/ \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0438\u043f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\n    Container.BindInstance(new Foo());\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432\n    Container.BindInstances(new Foo(), new Bar());\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432\n\n    \/\/ BindInstance \u0447\u0430\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e 10 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f int\n    Container.Bind&lt;int&gt;().FromInstance(10);\n    Container.Bind&lt;bool&gt;().FromInstance(false);\n\n    \/\/ \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c:\n    Container.BindInstance(10);\n    Container.BindInstance(false);\n\n    \/\/ \u041d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 When \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n    Container.BindInstance(10).WhenInjectedInto&lt;Foo&gt;();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromMethod\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e\n    \/\/ \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 (FromFactory)\n    Container.Bind&lt;Foo&gt;().FromMethod(GetFoo);\n\n    \/\/ \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 IFoo\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Instantiate \u0432\u043c\u0435\u0441\u0442\u043e new, \u0447\u0442\u043e\u0431\u044b Foo1 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0432\u043e\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044e\n    Container.Bind&lt;IFoo&gt;().FromMethod(GetRandomFoo);\n\n    \/\/ \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e\n    Container.Bind&lt;Foo&gt;().FromMethod(ctx =&gt; new Foo());\n\n    \/\/ \u042d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e AsTransient\n    Container.Bind&lt;Foo&gt;().FromMethod(ctx =&gt; ctx.Container.Instantiate&lt;Foo&gt;());\n\n    InstallMore();\n}\n\nvoid InstallMore()\n{\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromResolveGetter\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\n    \/\/ \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\n    Container.Bind&lt;Foo&gt;().AsSingle();\n\n    Container.Bind&lt;Bar&gt;().FromResolveGetter&lt;Foo&gt;(foo =&gt; foo.GetBar());\n\n    \/\/ \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n    Container.Bind&lt;string&gt;().FromResolveGetter&lt;Foo&gt;(foo =&gt; foo.GetTitle());\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromNewComponentOnNewGameObject\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 GameObject \u0432 \u043a\u043e\u0440\u043d\u0435 \u0441\u0446\u0435\u043d\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 MonoBehaviour Foo\n    Container.Bind&lt;Foo&gt;().FromNewComponentOnNewGameObject().AsSingle();\n\n    \/\/ \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WithGameObjectName\n    Container.Bind&lt;Foo&gt;().FromNewComponentOnNewGameObject().WithGameObjectName(&quot;Foo1&quot;).AsSingle();\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().FromNewComponentOnNewGameObject().AsSingle();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromComponentInNewPrefab (singleton)\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 GameObject \u0432 \u043a\u043e\u0440\u043d\u0435 \u0441\u0446\u0435\u043d\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0430\u0431\n    \/\/ \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a Zenject \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430, \u043e\u043d \u043d\u0430\u0439\u0434\u0451\u0442 \u0432 \u043d\u0451\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Foo \u0438 \u0432\u0435\u0440\u043d\u0451\u0442 \u0435\u0433\u043e\n    GameObject prefab = null;\n    Container.Bind&lt;Foo&gt;().FromComponentInNewPrefab(prefab).AsSingle();\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().FromComponentInNewPrefab(prefab).AsSingle();\n\n    \/\/ \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\n    \/\/ \u0412\u0430\u0436\u043d\u043e: \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0430\u0431\u0430\n    \/\/ \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u043f\u0440\u0435\u0444\u0430\u0431\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Foo \u0438 Bar\n    Container.Bind(typeof(Foo), typeof(Bar)).FromComponentInNewPrefab(prefab).AsSingle();\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromComponentInNewPrefab (Transient)\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d Foo\n    Container.Bind&lt;Foo&gt;().FromComponentInNewPrefab(prefab).AsTransient();\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().FromComponentInNewPrefab(prefab);\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b\n\n    \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;PlayerName&quot;\n    \/\/ \u0425\u043e\u0442\u044f \u0447\u0430\u0441\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0433\u043e\n    Container.Bind&lt;string&gt;().WithId(&quot;PlayerName&quot;).FromInstance(&quot;\u0438\u043c\u044f \u0438\u0433\u0440\u043e\u043a\u0430&quot;);\n\n    \/\/ \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435\n    Container.BindInstance(&quot;\u0438\u043c\u044f \u0438\u0433\u0440\u043e\u043a\u0430&quot;).WithId(&quot;PlayerName&quot;);\n\n    \/\/ \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ID \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430:\n    Container.BindInstance(&quot;foo&quot;).WithId(&quot;FooA&quot;);\n    Container.BindInstance(&quot;asdf&quot;).WithId(&quot;FooB&quot;);\n\n    InstallMore2();\n}\n\n\/\/ \u041f\u0440\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 ID:\npublic class Norf\n{\n    [Inject(Id = &quot;FooA&quot;)]\n    string _foo;\n}\n\npublic class Qux\n{\n    [Inject(Id = &quot;FooB&quot;)]\n    string _foo;\n}\n\npublic void InstallMore2()\n{\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ AsCached\n\n    \/\/ \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Foo, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u0434\u0438\u043d \u0431\u0435\u0437 ID\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c AsCached, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e Foo \u043d\u0435 singleton, \u043d\u043e \u0438 \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d\n    \/\/ \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 3 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Foo\n    Container.Bind&lt;Foo&gt;().AsCached();\n    Container.Bind&lt;Foo&gt;().WithId(&quot;FooA&quot;).AsCached();\n    Container.Bind&lt;Foo&gt;().WithId(&quot;FooA&quot;).AsCached();\n\n    InstallMore3();\n}\n\n\/\/ \u0415\u0441\u043b\u0438 ID \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 [Inject], \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\n\/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0431\u0435\u0437 ID \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 ID \u2014 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\npublic class Norf2\n{\n    [Inject]\n    Foo _foo;\n}\n\n\/\/ Qux2._foo \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u043c \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c, \u0447\u0442\u043e \u0438 Norf2._foo\n\/\/ \u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c AsCached, \u0430 \u043d\u0435 AsTransient\npublic class Qux2\n{\n    [Inject]\n    Foo _foo;\n\n    [Inject(Id = &quot;FooA&quot;)]\n    Foo _foo2;\n}\n\npublic void InstallMore3()\n{\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ Conditions (\u0443\u0441\u043b\u043e\u0432\u0438\u044f)\n\n    \/\/ \u0421\u0434\u0435\u043b\u0430\u0442\u044c Foo \u0432\u0438\u0434\u0438\u043c\u044b\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Bar\n    \/\/ \u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Foo \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\n    Container.Bind&lt;Foo&gt;().AsSingle().WhenInjectedInto&lt;Bar&gt;();\n\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 IFoo \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo1&gt;().AsSingle().WhenInjectedInto&lt;Bar&gt;();\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo2&gt;().AsSingle().WhenInjectedInto&lt;Qux&gt;();\n\n    \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Foo1 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432 Qux \u2014 \u0442\u0430\u043c Foo2\n    \/\/ \u0415\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442, \u043e\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo1&gt;().AsSingle();\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo2&gt;().AsSingle().WhenInjectedInto&lt;Qux&gt;();\n\n    \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Foo \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445\n    Container.Bind&lt;Foo&gt;().AsSingle().WhenInjectedInto(typeof(Bar), typeof(Qux), typeof(Baz));\n\n    \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 &quot;my game&quot; \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a, \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 Gui \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c &quot;Title&quot;\n    Container.BindInstance(&quot;my game&quot;).WithId(&quot;Title&quot;).WhenInjectedInto&lt;Gui&gt;();\n\n    \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e 5 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 int, \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 Gui\n    Container.BindInstance(5).WhenInjectedInto&lt;Gui&gt;();\n\n    \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 5 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 float, \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043b\u0438 \u043f\u043e\u043b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 Gui \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;width&quot;\n    \/\/ \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u0442.\u043a. \u0438\u043c\u044f \u043f\u043e\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443\n    Container.BindInstance(5.0f).When(ctx =&gt;\n        ctx.ObjectType == typeof(Gui) && ctx.MemberName == &quot;width&quot;);\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 Foo \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Bar\n    \/\/ \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 Bar \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 Qux, \u0430 Qux \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 IFoo \u2014 \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e IFoo \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u043e\u0432\u044b\u0439 Foo\n    Container.Bind&lt;IFoo&gt;().To&lt;Foo&gt;().AsTransient().When(\n        ctx =&gt; ctx.AllObjectTypes.Contains(typeof(Bar)));\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439\n\n    var foo1 = new Foo();\n    var foo2 = new Foo();\n\n    Container.Bind&lt;Bar&gt;().WithId(&quot;Bar1&quot;).AsCached();\n    Container.Bind&lt;Bar&gt;().WithId(&quot;Bar2&quot;).AsCached();\n\n    \/\/ \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c ParentContexts, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432\n    Container.BindInstance(foo1).When(c =&gt; c.ParentContexts.Where(x =&gt; x.MemberType == typeof(Bar) && x.Identifier == &quot;Bar1&quot;).Any());\n    Container.BindInstance(foo2).When(c =&gt; c.ParentContexts.Where(x =&gt; x.MemberType == typeof(Bar) && x.Identifier == &quot;Bar2&quot;).Any());\n\n    \/\/ \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:\n    Assert.That(Container.ResolveId&lt;Bar&gt;(&quot;Bar1&quot;).Foo == foo1);\n    Assert.That(Container.ResolveId&lt;Bar&gt;(&quot;Bar2&quot;).Foo == foo2);\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ FromResolve\n\n    \/\/ FromResolve \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435\n    \/\/ \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 IBar, IFoo \u0438 Foo \u0431\u0443\u0434\u0443\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo,\n    \/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0435\u0444\u0430\u0431\u0435\n    GameObject fooPrefab = null;\n    Container.Bind&lt;Foo&gt;().FromComponentInNewPrefab(fooPrefab).AsSingle();\n    Container.Bind&lt;IBar&gt;().To&lt;Foo&gt;().FromResolve();\n    Container.Bind&lt;IFoo&gt;().To&lt;IBar&gt;().FromResolve();\n\n    \/\/ \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e\n    Container.Bind(typeof(Foo), typeof(IBar), typeof(IFoo)).To&lt;Foo&gt;().FromComponentInNewPrefab(fooPrefab).AsSingle();\n\n    InstallMore4();\n}\n\nvoid InstallMore4()\n{\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ Installing Other Installers\n\n    \/\/ \u041d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c InstallBindings() \u0443 FooInstaller\n    FooInstaller.Install(Container);\n\n    \/\/ \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c FooInstaller \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\n    Container.BindInstance(&quot;foo&quot;).WhenInjectedInto&lt;FooInstaller&gt;();\n    FooInstaller.Install(Container);\n\n    \/\/ \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a Installer&lt;&gt;, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438\n    FooInstallerWithArgs.Install(Container, &quot;foo&quot;);\n\n    \/\/\/\/\/\/\/\/\/\/\/\/\/ \u0420\u0443\u0447\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Container\n\n    \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f\/\u043c\u0435\u0442\u043e\u0434\u044b \u0441 [Inject] \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0441 [Inject]\n    var foo = new Foo();\n    Container.Inject(foo);\n\n    \/\/ \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u043b\u044f IFoo, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438\n    \/\/ \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b\n    \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0438\u043f \u2014 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\n    Container.Resolve&lt;IFoo&gt;();\n\n    \/\/ \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0432\u0435\u0440\u043d\u0451\u0442 null, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\n    Container.TryResolve&lt;IFoo&gt;();\n\n    \/\/ \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 2 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 Foo\n    \/\/ \u041f\u0440\u043e\u0441\u0442\u043e Resolve&lt;IFoo&gt; \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\n    Container.BindInstance(new Foo());\n    Container.BindInstance(new Foo());\n    var foos = Container.ResolveAll&lt;IFoo&gt;();\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Foo \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\/\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\n    Container.Instantiate&lt;Foo&gt;();\n\n    GameObject prefab1 = null;\n    GameObject prefab2 = null;\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\n    GameObject go = Container.InstantiatePrefab(prefab1);\n\n    \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 MonoBehaviour\n    Foo foo2 = Container.InstantiatePrefabForComponent&lt;Foo&gt;(prefab2);\n\n    \/\/ \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 GameObject\n    Foo foo3 = Container.InstantiateComponent&lt;Foo&gt;(go);\n}\n<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0442\u044c \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c 2-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u044f\u0442\u0430\u043c\u0438 \u0438\u0437 &#8220;k-syndicate.school&#8221; \u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,10,20],"tags":[24,22,21,23],"_links":{"self":[{"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/posts\/1211"}],"collection":[{"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/varnagame.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1211"}],"version-history":[{"count":169,"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/posts\/1211\/revisions"}],"predecessor-version":[{"id":1559,"href":"https:\/\/varnagame.site\/index.php?rest_route=\/wp\/v2\/posts\/1211\/revisions\/1559"}],"wp:attachment":[{"href":"https:\/\/varnagame.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/varnagame.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/varnagame.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}