#if !NOT_UNITY3D using System; using System.Collections.Generic; using UnityEngine; using ModestTree; using Zenject.Internal; namespace Zenject { [NoReflectionBaking] public abstract class SubContainerCreatorByNewGameObjectDynamicContext : SubContainerCreatorDynamicContext { readonly GameObjectCreationParameters _gameObjectBindInfo; public SubContainerCreatorByNewGameObjectDynamicContext( DiContainer container, GameObjectCreationParameters gameObjectBindInfo) : base(container) { _gameObjectBindInfo = gameObjectBindInfo; } protected override GameObject CreateGameObject(InjectContext context, out bool shouldMakeActive) { shouldMakeActive = true; var gameObject = Container.CreateEmptyGameObject(_gameObjectBindInfo, null); gameObject.SetActive(false); return gameObject; } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectInstaller : SubContainerCreatorByNewGameObjectDynamicContext { readonly Type _installerType; readonly List _extraArgs; public SubContainerCreatorByNewGameObjectInstaller( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, Type installerType, List extraArgs) : base(container, gameObjectBindInfo) { _installerType = installerType; _extraArgs = extraArgs; Assert.That(installerType.DerivesFrom(), "Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType); } protected override void AddInstallers(List args, GameObjectContext context) { context.AddNormalInstaller( new ActionInstaller(subContainer => { var extraArgs = ZenPools.SpawnList(); extraArgs.AllocFreeAddRange(_extraArgs); extraArgs.AllocFreeAddRange(args); var installer = (InstallerBase)subContainer.InstantiateExplicit( _installerType, extraArgs); ZenPools.DespawnList(extraArgs); installer.InstallBindings(); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.That(args.IsEmpty()); context.AddNormalInstaller( new ActionInstaller(_installerMethod)); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 1); Assert.That(args[0].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 2); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 3); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); Assert.That(args[2].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly #if !NET_4_6 ModestTree.Util. #endif Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 4); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); Assert.That(args[2].Type.DerivesFromOrEqual()); Assert.That(args[3].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly #if !NET_4_6 ModestTree.Util. #endif Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 5); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); Assert.That(args[2].Type.DerivesFromOrEqual()); Assert.That(args[3].Type.DerivesFromOrEqual()); Assert.That(args[4].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly #if !NET_4_6 ModestTree.Util. #endif Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 5); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); Assert.That(args[2].Type.DerivesFromOrEqual()); Assert.That(args[3].Type.DerivesFromOrEqual()); Assert.That(args[4].Type.DerivesFromOrEqual()); Assert.That(args[5].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value, (TParam6)args[5].Value); })); } } [NoReflectionBaking] public class SubContainerCreatorByNewGameObjectMethod : SubContainerCreatorByNewGameObjectDynamicContext { readonly #if !NET_4_6 ModestTree.Util. #endif Action _installerMethod; public SubContainerCreatorByNewGameObjectMethod( DiContainer container, GameObjectCreationParameters gameObjectBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action installerMethod) : base(container, gameObjectBindInfo) { _installerMethod = installerMethod; } protected override void AddInstallers(List args, GameObjectContext context) { Assert.IsEqual(args.Count, 10); Assert.That(args[0].Type.DerivesFromOrEqual()); Assert.That(args[1].Type.DerivesFromOrEqual()); Assert.That(args[2].Type.DerivesFromOrEqual()); Assert.That(args[3].Type.DerivesFromOrEqual()); Assert.That(args[4].Type.DerivesFromOrEqual()); Assert.That(args[5].Type.DerivesFromOrEqual()); Assert.That(args[6].Type.DerivesFromOrEqual()); Assert.That(args[7].Type.DerivesFromOrEqual()); Assert.That(args[8].Type.DerivesFromOrEqual()); Assert.That(args[9].Type.DerivesFromOrEqual()); context.AddNormalInstaller( new ActionInstaller(subContainer => { _installerMethod(subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value, (TParam6)args[5].Value, (TParam7)args[6].Value, (TParam8)args[7].Value, (TParam9)args[8].Value, (TParam10)args[9].Value); })); } } } #endif