VContainer - 3KGames/rules GitHub Wiki
DI - Dependency Injection.
Это такая штука которая сама прокидыват всякие зависимости. -Что такое зависимость? -Это класс, объект, GameObject
который нужен для работы в разных частях кода. (то что мы раньше прокидывали через [SerializeField]
, или GetComponent
)
В VContainer есть LifetimeScope
'ы - это классы которые мы сами создаем, наследуя их от LifetimeScope
. Каждый такой класс хранит свой контейнер зависимостей, откуда VContainer берет зависимости и прокидывает. Зачем нужны разные LifetimeScope
'ы? - Чтобы задавать разные сроки жизни для разных зависимостей и вообще чтобы их разделять. На пример, у нас есть GameLifetimeScope
и LevelLifeteimeScope
. Ясно что второй скоуп дочерний к первому (мы входим в игру, а потом в игре уже входим в уровень), и те зависимости, что создаются для уровня, должны очиститься после завершения уровня.
Чтобы DI работал нужно просто создать *LifetimeScope : LifetimeScope
класс и в нем зарегистрировать зависимости через builder.Register*
и DI сам прокинит эту зависимость в конструкторы, функции, поля других классов, вообщем - куда угодно. Пример с официальной документации
- C# Классы builder.Register(LifeTime.Singleton|LifeTime.Scoped|и тд). VContainer сам создаст и очистит объект для этого класса когда надо
- объекты класса bulder.RegisterInstance(someInstance). VContainer просто прокидывает эту объект куда надо, но создает ее и не удалят. На деле очень похоже на builder.Register(LifeTime.Singelton)
- Unity Monobehaviour builder.RegisterComponent(MonobehaviourClass). То же самое что и выше, только для монобехов
- C# Классы с проброшенными функциями событий из Unity (Update, Start...) builder.RegisterEntryPoint(Lifetime.*). То же самое что обычный Register но позволяет запускать Update, FixedUpdate и тд в обынчных C# классах (sic!)
После моего небольшого введения рекомендую просмотреть документацию, слава богу она не большая и понятная. Рекомендую просмотреть только статью /Getting Start/Hello World и разделы /Resolving с /Regestering, остальное - по желанию