Search Unity

[RELEASED] Zenject Dependency Injection Framework

Discussion in 'Assets and Asset Store' started by eventropy, Jun 3, 2014.

  1. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    What does MySecondClass look like?
     
  2. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    It looks like this:

    Code (CSharp):
    1. public class MySecondClass : MonoBehaviour
    2. {
    3.     MyClass _myClass;
    4.  
    5.     [Inject]
    6.     public void Initialize(MyClass myClass)
    7.     {
    8.         _myClass = myClass;
    9.     }
    10.  
    11.     public void DoStuff()
    12.     {
    13.     }
    14. }
     
  3. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    Oh yes I see the issue now. There is nothing bound to MyClass. If you want to bind both the interface and the concrete type then you have to do this kind of thing instead:

    Container.Bind(typeof(IMyInterface), typeof(MyClass))
    .To<MyClass>()
    .AsSingle()
     
  4. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    This is what I did and it's still not working:

    Code (CSharp):
    1. public class MyClass : MonoBehaviour, IMyInterface
    2. {
    3. }
    4.  
    5. public class MySecondClass : MonoBehaviour
    6. {
    7.     IMyInterface _myClass;
    8.  
    9.     [Inject]
    10.     public void Initialize(IMyInterface myClass)
    11.     {
    12.         _myClass = myClass;
    13.     }
    14.  
    15.     public void DoStuff()
    16.     {
    17.         _myClass.DoSomething();
    18.     }
    19. }
    20.  
    21. public class MyInstaller : MonoInstaller<MyInstaller>
    22. {
    23.     Container.Bind<MySecondClass> ().FromNewComponentOnNewGameObject().AsSingle().NonLazy();
    24.  
    25.     Container.Bind(typeof(IMyInterface), typeof(MyClass))
    26.         .To<MyClass>()
    27.         .AsSingle()
    28.         .WhenInjectedInto<MySecondClass>();
    29. }
    I tried without the WhenInjectedInto<MySecondClass>() part and it didn't make a difference.
     
    Last edited: Apr 20, 2018
  5. milkcorp

    milkcorp

    Joined:
    Feb 26, 2012
    Posts:
    11
    Hi,

    I'm working on photon network project with Zenject.
    I got a error and I couldn't solve it.
    How can I fix this?

    There is two game objects in the scene.

    *Player
    It has Player.cs and it add to Zenject binding .

    *PlayerVehicle
    The transform add to Zenject binding.

    *The error message
    ZenjectException: Unable to resolve type 'UnityEngine.Transform' while building object with type 'PlayerVehicle'.



    Code (CSharp):
    1. public class NetworkFactory : IFactory<string, GameObject>
    2. {
    3.     [Inject]
    4.     private DiContainer m_container = null;
    5.  
    6.     public GameObject Create(string prefabName)
    7.     {
    8.        var go = PhotonNetwork.Instantiate(prefabName, new Vector3(0, 0, 0), Quaternion.identity, 0);
    9.        m_container.InjectGameObject(go);
    10.  
    11.        return go;
    12.     }
    13. }
    14.  
    15. public class GameInstaller : MonoInstaller<GameInstaller>
    16. {  
    17.     public override void InstallBindings()
    18.     {
    19.        Container.BindInterfacesTo<PlayerSpawnManager>().AsSingle();
    20.        Container.Bind<NetworkFactory>().AsSingle();
    21.     }
    22. }
    23.  
    24. public class PlayerSpawnManager : IInitializable {
    25.  
    26.     NetworkFactory _factory;
    27.  
    28.     public void Initialize()
    29.     {
    30.        var player = _factory.Create("Player");
    31.     }
    32.  
    33.     public PlayerSpawnManager(NetworkFactory factory)
    34.     {
    35.       _factory = factory;
    36.     }
    37. }
    38.  
    39. public class Player : MonoBehaviour{
    40.  
    41.     public Transform vehiclePosition;
    42.  
    43. }
    44.  
    45. public class PlayerInstaller : MonoInstaller<PlayerInstaller>
    46.  
    47. {
    48.     public override void InstallBindings()
    49.     {
    50.        //Container.Bind<Player>().AsSingle();
    51.        Container.BindInterfacesTo<PlayerVehicleSpawnManager>().AsSingle();
    52.        Container.BindInterfacesAndSelfTo<PlayerVehicle>().AsSingle();
    53.  
    54.     }
    55. }
    56.  
    57. public class PlayerVehicleSpawnManager : IInitializable
    58. {
    59.  
    60.     NetworkFactory _factory;
    61.  
    62.     public void Initialize()
    63.     {
    64.  
    65.        var playerVehicle = _factory.Create("Car");
    66.  
    67.     }
    68.     public PlayerVehicleSpawnManager(NetworkFactory factory)
    69.     {
    70.        _factory = factory;
    71.     }
    72. }
    73.  
    74. public class PlayerVehicle
    75. {
    76.  
    77.     Player _player;
    78.     Transform _transform;
    79.  
    80.     PlayerVehicle(Player player, Transform transform)
    81.     {
    82.        _player = player;
    83.        _transform = transform;
    84.        _transform.SetParent(_player.vehiclePosition);
    85.     }
    86. }
     
  6. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    You've probably moved on since it's been a month later, but I tried your code now and found it worked fine after adding FromNewComponentOnNewGameObject to the MyClass binding
     
  7. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    It's still unclear to me how you have this set up. Where is PlayerInstaller being installed? Do you have a GameObjectContext on Player prefab? Also, I'm not that familiar with Photon but doesn't Photon.Instantiate cause the game object to be instantiated on any connected clients as well? In which case the inject would not happen? You might consider using ZenAutoInjecter on the prefab to solve that (see docs)
     
  8. milkcorp

    milkcorp

    Joined:
    Feb 26, 2012
    Posts:
    11
    Hi eventropy,
    Thank you for replying.

    Yes, Player prefab has PlayerInstaller and GameObjectContext.
    I tested your code but I got a error.
    *Instantiator should not be used to create new mono behaviours. Must use InstantiatePrefabForComponent, InstantiatePrefab, or InstantiateComponent.

    I think it's because of it's instantiated by PhotonNetwork.Instantiate instead of Factory.
    (It's Same things like Instantiate(Resources.Load("Player"), Vector3.zero, Quaternion.identity))

    >Photon.Instantiate cause the game object to be instantiated on any connected clients as well?
    Yes.

    >In which case the inject would not happen?
    Yes. Maybe...

    I also tried ZenAutoInjecter but I couldn't resolve the inject.
    *ZenjectException: Unable to resolve type ...

    Can I inject to each other of two Instantiated game objects with class?
    like this.

    Thanks,
    Code (CSharp):
    1. public class TestGamenstaller : MonoInstaller<TestGamenstaller>
    2. {
    3.     public override void InstallBindings()
    4.     {
    5.         //it has Class A zenject binding, auto inject.
    6.         Instantiate(Resources.Load("ClassA"), Vector3.zero, Quaternion.identity);
    7.         //it has Class B zenject binding, auto inject.
    8.         Instantiate(Resources.Load("ClassB"), Vector3.zero, Quaternion.identity);
    9.     }
    10. }
    11.  
    12. ublic class ClassA : MonoBehaviour {
    13.  
    14.     ClassB _classB;
    15.  
    16.     [Inject]
    17.     public void Initialize(ClassB classB)
    18.     {
    19.         _classB = classB;
    20.     }
    21. }
    22.  
    23. public class ClassB : MonoBehaviour {
    24.  
    25.     ClassA _classA;
    26.  
    27.     [Inject]
    28.     public void Initialize(ClassA classA)
    29.     {
    30.         _classA = classA;
    31.     }
    32. }
     
  9. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    I'm not sure what you mean when you say you tested my code - I didn't provide any code.

    Based on the new code you posted though - You shouldn't instantiate things during the install phase. If you're going to create a test where you call GameObject.Instantiate you should do it in an Initializable.Initialize method or a MonoBehaviour.Start method

    It sounds like you need to sort out the 'Unable to resolve type' errors. That means that injection is happening but zenject can't find bindings for all the [Inject] data in the MonoBehaviours
     
  10. milkcorp

    milkcorp

    Joined:
    Feb 26, 2012
    Posts:
    11
    Hi eventropy,

    oops, I misunderstood.
    I need more research for zenject and photon.
    I don't know the spawned objects via network could has inject and binding.

    thanks,
     
  11. ludum_mubul

    ludum_mubul

    Joined:
    Dec 9, 2016
    Posts:
    27
    Hello!

    Can someone help me with injection MonoBehaviour inherited class in standard C# class?
    Because I'm receiving null ref on that MonoBehaviour class. But when I inject this monobehaviour into different monobehaviour, it's working fine.
    SceneContext is on scene, of course.
    What I'm missing or doing wrong?

    Code (CSharp):
    1. public class Installer : MonoInstaller<Installer>
    2.     {
    3.  
    4.         [SerializeField]
    5.         Player player;
    6.  
    7.         [SerializeField]
    8.         GameSettings gameSettings;
    9.        
    10.         public override void InstallBindings()
    11.         {
    12.  
    13.             Container.BindInstance(player).AsSingle();
    14.             Container.BindInstance(gameSettings).AsSingle();
    15.  
    16.             Container.Bind<TimingTapModel>().AsSingle().NonLazy();
    17.             Container.Bind<DirectionModel>().AsSingle().NonLazy();
    18.         }
    19.  
    20.     }

    Player is mono behaviour script
    Code (CSharp):
    1. public class TestScript
    2. {
    3.  
    4.     [Inject]
    5.     private Player player;
    6.  
    7.     [Inject]
    8.     private TimingTapModel tapInput;
    9.  
    10.     public Vector3 GetPlayerCurrentSpeed()
    11.     {
    12.         return player.copterCore.currentSpeed;
    13.     }
    14.  
    15.     public float GetCoreCurrentSpeed()
    16.     {
    17.         return tapInput.TotalTime;
    18.     }
    19. }
     
  12. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    It shouldn't matter if it's being injected into a monobehaviour or a non monobehaviour. Can you reduce it down to a complete small example?
     
  13. ludum_mubul

    ludum_mubul

    Joined:
    Dec 9, 2016
    Posts:
    27
    What you mean "reduce it down"?
     
  14. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    If you think you've found a bug with zenject, it's much easier for me to help if you can provide an MRE (minimal reproducible example) rather than posting excerpts from your project. So all the code necessary to reproduce it and ideally the smallest amount of code needed to do so. Sometimes I can guess based on the excerpts but not in this case. I could try and reconstruct a small example based on what you said, but chances are it would work as expected. By reducing it down to an MRE it also will ensure that the cause is not something outside of zenject like in one of your classes somehow
     
  15. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    Yea, I went with a different approach, but thanks for the reply anyway. I may have need for something like this again, so I'll probably try what you suggested.
     
  16. olegzheleztsov

    olegzheleztsov

    Joined:
    Oct 15, 2017
    Posts:
    9
    Hello, i am new in zenject. The most important question is how to install objects in the container that should not be destroyed when changing the active scene.
    I have simple setup



    GameController must exists across all scenes in game ( DontDestroyOnLoad(gameObject) ), but when LoadScene() zenject remove GameController. How tell zenject don't destroy it and how manage such objects?
     
  17. Maeslezo

    Maeslezo

    Joined:
    Jun 16, 2015
    Posts:
    330
    Hello,

    Nested container are very useful

    In the documentation, you can find this:
    Code (CSharp):
    1. public class TestInstaller : MonoInstaller
    2. {
    3.     public override void InstallBindings()
    4.     {
    5.         Container.BindInterfacesTo<GameController>().AsSingle();
    6.         Container.Bind<Greeter>().FromSubContainerResolve().ByMethod(InstallGreeter).AsSingle();
    7.     }
    8.  
    9.     void InstallGreeter(DiContainer subContainer)
    10.     {
    11.         subContainer.Bind<Greeter>().AsSingle();
    12.         subContainer.BindInstance("Hello world!");
    13.     }
    14. }
    The great thing about this it's that you can use Greeter as Facade for the rest of the code.

    I have been trying to the same with scene parenting. The piece I am missing is the facade part.
    I would to do something like this:
    Code (CSharp):
    1. Container.Bind<Greeter>().FromSubContainerLoadSceneAdditive(newScene);
    In that way I could load a scene and resolve the bind by the scene context of the new scene.

    Why this? Because I have a very complex system with their dependencies, but I want the rest of the project to use the system by a Facade. I know I can use the subcontainer bind, but it is much cleaner for me with a stand-alone scene.

    Thank you
     
  18. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    FromSubContainerLoadSceneAdditive is a great idea. I can definitely see how it would be useful, but I don't think it can work, because the new scene cannot be loaded synchronously. There is a non-async SceneManager.LoadScene method, but the scene is not actually started until the next frame.

    So I think the best way to do it would be something like this instead:
    Code (CSharp):
    1.  
    2.     public class Test
    3.     {
    4.         SceneContextRegistry _contextRegistry;
    5.  
    6.         public Test(SceneContextRegistry contextRegistry)
    7.         {
    8.             _contextRegistry = contextRegistry;
    9.         }
    10.  
    11.         public async Task<MyFacadeClass> LoadSceneAndGetFacade()
    12.         {
    13.             var scene = SceneManager.GetSceneByName("NewScene");
    14.  
    15.             await SceneManager.LoadSceneAsync(scene.name);
    16.  
    17.             return _contextRegistry.GetContainerForScene(scene).Resolve<MyFacadeClass>();
    18.         }
    19.     }
    20.  
    Or, if you don't want to inject SceneContextRegistry you could also get it by doing
    Code (CSharp):
    1. ProjectContext.Instance.Container.Resolve<SceneContextRegistry>()
    . Also, if you're not using async-await you can do a coroutine equivalent.
     
    Maeslezo likes this.
  19. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    I suppose you could also inject Task<MyFacadeClass> directly into the initial object graph too, and then use FromMethod with something like that above, which would basically function very similarly to FromSubContainerLoadSceneAdditive. You could also use ZenSceneLoader to force the new scene to be a child of the current scene too (with the above example you'd have to set up scene contract parents for it to be that way)

    You could write an extension method that did that, I think that'd be pretty neat
     
  20. Maeslezo

    Maeslezo

    Joined:
    Jun 16, 2015
    Posts:
    330
    I see the problem here. I will try your suggestion.

    Thank you very much!
     
  21. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    I have been using Zenject for a couple of years now and so far everything has been working fine. However, yesterday i upgraded to Unity 2018 3.3.f1 which comes with Visual Studio 2017 Community edition. Well i am having the following problem today. My solution won't compile because I am getting the following error in GameObjectContextEditor:

    "The type or namespace name 'GameObjectContext' could not be found..." (attachment 1).

    The problem is that class GameObjectContextEditor is in project Zenject-Editor and GameObjectContext is in project Assembly-CSharp. Because Assembly-CSharp already depends on Zenject-Editor I can't add a dependency to Assembly-CSharp in Zenject-Editor as that would create a circular dependency (attachment 2).

    This was never a problem in MonoDevelop, btw. Also, i updated to the latest version of Zenject from the Unity Asset Store today.

    How can I resolve this problem?
     

    Attached Files:

  22. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    There should be a file in the base Zenject folder called zenject.asmdef that makes Zenject compile in its own project rather than Assembly-Csharp. Maybe you deleted or missed that file by accident?
     
  23. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    That file is not present anywhere in any of the projects in the Visual Studio solution. I haven't deleted any files, i only just updated my Unity version three days ago. How can I retrieve that file?

    Update: correction, I did find the file in question, but it's not in the Assets/Zenject folder (in project Assembly-CSharp), but rather in the folder Assets/Plugins/Zenject. Not only that, but that folder, i.e. Plugins, is not included in the project Assembly-CSharp. I was only able to find it by doing a text search for it.

    There are also four more files with that extension, one for each Zenject project, i.e. Zenject-Editor, Zenject-PoolMoitor-Editor, Zenject-ReflectionBaking-Editor, and Zenject-TestFramework. In all of those the *.asamdef file is not included in the corresponding project either. Should I include the file in each project and try again?



     
    Last edited: Jan 30, 2019
  24. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    Can you try doing a clean install of the latest zenject? As far as I know the asmdef setup should play nicely with unity's new expectations
     
  25. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    Yes, that fixed it. The problem was that under my old installation of Zenject all of the files were under a folder called "Zenject", in the root "Assets" folder. After I installed the latest Zenject version, some of the files ended up in a new folder called "Plugins", while the old ones remained in the "Zenject" folder. That broke the assembly structure defined by the asmdef files. What i did to fix this was delete all Zenject files from my project and then install the latest version. Once i did that, I noticed all files were under the "Plugins" folder and everything started working correctly.
     
  26. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    Yeah, that makes sense. I think when unity imports an asset bundle it will replace any existing files with the new versions but it won't move them to a new location
     
    Raidenwins likes this.
  27. Maeslezo

    Maeslezo

    Joined:
    Jun 16, 2015
    Posts:
    330
    Hello,

    First, I apologize for asking a question about Zenject 4.7 (a two years old version).

    fooPrefab is a prefab with a gameobject context
    I have this installer:
    Code (CSharp):
    1.                 Container.Bind<IFoo>()
    2.                     .FromSubContainerResolve()
    3.                     .ByPrefab(fooPrefab)
    4.                     .AsSingle();
    With this binding, the fooPrefab is instantiated twice.

    However, with this line:
    Code (CSharp):
    1.                 Container.BindAllInterfaces<Foo>()
    2.                     .To<Foo>()
    3.                     .FromPrefab(fooPrefab)
    4.                     .AsSingle();
    I only have one prefab instance.

    1. Are they equivalent? Because with the second one, apparently everything work correctly, but reading the documentation, I think I should use FromSubContainerResolve().ByPrefab(fooPrefab)
    2. I have been searching this bug in zenject issue tracker and the release notes, but I didn't found anything, but I am pretty sure this may be fixed now. Do you remember something similar.
    PS: I swear we will update as soon as possible :(

    Void SimuZen.Services.AssetBundleRefactor:Inject (SimuzenAssetBundleTranslator, NetRegistryAssetsFromBundleFeeder, AssetBundleManager)+0x1 at F:\Simuzen\simuzen_dev\Assets\simuzen\platform\systems\base\services\bundle\AssetsFromBundle\AssetBundleRefactor.cs:[34:13-34:78]
    Object System.Reflection.MonoMethod:Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)+0x38 at :-1
    Object System.Reflection.MethodBase:Invoke (Object, Object[])+0x6 at :-1
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x27c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[994:25-994:85]
    Void Zenject.DiContainer:InjectExplicit (Object, List`1)+0x52 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[882:13-891:20]
    Void Zenject.DiContainer:Inject (Object, IEnumerable`1)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1614:13-1615:66]
    Void Zenject.DiContainer:Inject (Object)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1609:13-1609:47]
    Void Zenject.LazyInstanceInjector:LazyInjectAll ()+0x24 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\LazyInstanceInjector.cs:[55:17-55:45]
    Void Zenject.GameObjectContext:Construct (DiContainer, InstallerExtraArgs)+0xd8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\GameObjectContext.cs:[69:13-69:61]
    Object System.Reflection.MonoMethod:Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)+0x38 at :-1
    Object System.Reflection.MethodBase:Invoke (Object, Object[])+0x6 at :-1
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x27c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[994:25-994:85]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    GameObject Zenject.DiContainer:InstantiatePrefabExplicit (Object, List`1, GameObjectCreationParameters, Boolean)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1070:13-1071:55]
    GameObject Zenject.DiContainer:InstantiatePrefab (Object, IEnumerable`1, GameObjectCreationParameters)+0xb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1362:13-1363:88]
    DiContainer Zenject.SubContainerCreatorByPrefab:CreateSubContainer (List`1)+0x2c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorByPrefab.cs:[28:13-29:61]
    DiContainer Zenject.SubContainerCreatorCached:CreateSubContainer (List`1)+0x22 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorCached.cs:[25:17-25:91]
    Boolean <GetAllInstancesWithInjectSplit>d__6:MoveNext ()+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerDependencyProvider.cs:[47:13-47:78]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1513:13-1514:57]
    Boolean <Instantiate>d__10:MoveNext ()+0xa1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiator.cs:[58:13-59:74]
    Boolean <Instantiate>d__8:MoveNext ()+0xe0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiatorCached.cs:[65:17-65:45]
    Boolean <GetAllInstancesWithInjectSplit>d__4:MoveNext ()+0xfe at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\GetFromPrefabComponentProvider.cs:[52:17-52:55]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1513:13-1514:57]
    Boolean <Instantiate>d__10:MoveNext ()+0xa1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiator.cs:[58:13-59:74]
    Boolean <Instantiate>d__8:MoveNext ()+0xe0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiatorCached.cs:[65:17-65:45]
    Boolean <GetAllInstancesWithInjectSplit>d__4:MoveNext ()+0xfe at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\GetFromPrefabComponentProvider.cs:[52:17-52:55]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Void Zenject.DiContainer:InjectExplicit (Object, List`1)+0x52 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[882:13-891:20]
    Void Zenject.DiContainer:Inject (Object, IEnumerable`1)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1614:13-1615:66]
    Void Zenject.DiContainer:Inject (Object)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1609:13-1609:47]
    Void Zenject.LazyInstanceInjector:OnInstanceResolved (Object)+0x19 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\LazyInstanceInjector.cs:[45:17-45:45]
    Boolean <GetAllInstancesWithInjectSplit>d__5:MoveNext ()+0x72 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\InstanceProvider.cs:[33:13-33:57]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x1fe at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[977:29-978:122]
    Void Zenject.DiContainer:InjectExplicit (Object, List`1)+0x52 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[882:13-891:20]
    Void Zenject.DiContainer:Inject (Object, IEnumerable`1)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1614:13-1615:66]
    Void Zenject.DiContainer:Inject (Object)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1609:13-1609:47]
    Void Zenject.LazyInstanceInjector:LazyInjectAll ()+0x24 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\LazyInstanceInjector.cs:[55:17-55:45]
    Void Zenject.GameObjectContext:Construct (DiContainer, InstallerExtraArgs)+0xd8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\GameObjectContext.cs:[69:13-69:61]
    Object System.Reflection.MonoMethod:Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)+0x38 at :-1
    Object System.Reflection.MethodBase:Invoke (Object, Object[])+0x6 at :-1
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x27c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[994:25-994:85]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    GameObject Zenject.DiContainer:InstantiatePrefabExplicit (Object, List`1, GameObjectCreationParameters, Boolean)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1070:13-1071:55]
    GameObject Zenject.DiContainer:InstantiatePrefab (Object, IEnumerable`1, GameObjectCreationParameters)+0xb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1362:13-1363:88]
    DiContainer Zenject.SubContainerCreatorByPrefab:CreateSubContainer (List`1)+0x2c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorByPrefab.cs:[28:13-29:61]
    DiContainer Zenject.SubContainerCreatorCached:CreateSubContainer (List`1)+0x22 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorCached.cs:[25:17-25:91]
    Boolean <GetAllInstancesWithInjectSplit>d__6:MoveNext ()+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerDependencyProvider.cs:[47:13-47:78]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1513:13-1514:57]
    Boolean <Instantiate>d__10:MoveNext ()+0xa1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiator.cs:[58:13-59:74]
    Boolean <Instantiate>d__8:MoveNext ()+0xe0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiatorCached.cs:[65:17-65:45]
    Boolean <GetAllInstancesWithInjectSplit>d__4:MoveNext ()+0xfe at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\GetFromPrefabComponentProvider.cs:[52:17-52:55]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    Object Zenject.DiContainer:Resolve (InjectContext)+0xcb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[632:21-632:51]
    Object Zenject.DiContainer:InstantiateInternal (Type, Boolean, InjectArgs)+0x126 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[813:25-814:81]
    Object Zenject.DiContainer:InstantiateExplicit (Type, Boolean, InjectArgs)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[745:17-745:76]
    Boolean <GetAllInstancesWithInjectSplit>d__8:MoveNext ()+0xc0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\TransientProvider.cs:[63:13-64:55]
    Boolean <GetAllInstancesWithInjectSplit>d__5:MoveNext ()+0xeb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\CachedProvider.cs:[45:13-45:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Boolean <GetAllInstancesWithInjectSplit>d__12:MoveNext ()+0x141 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\AddToGameObjectComponentProviders\AddToGameObjectComponentProviderBase.cs:[89:13-89:77]
    Boolean <GetAllInstancesWithInjectSplit>d__5:MoveNext ()+0x153 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\CachedProvider.cs:[56:17-56:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    Boolean <GetAllInstancesWithInjectSplit>d__6:MoveNext ()+0x76 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ResolveProvider.cs:[36:13-36:96]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    List`1 Zenject.DiContainer:ResolveDependencyRoots ()+0x29 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[237:13-237:64]
    Void Zenject.ProjectContext:Initialize ()+0xc6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\ProjectContext.cs:[155:13-155:76]
    ProjectContext Zenject.ProjectContext:get_Instance ()+0x20 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\ProjectContext.cs:[53:21-53:44]
    Void Zenject.SceneContext:Awake ()+0x1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\SceneContext.cs:[107:13-107:59]

    The second creation
    Void SimuZen.Services.AssetBundleRefactor:Inject (SimuzenAssetBundleTranslator, NetRegistryAssetsFromBundleFeeder, AssetBundleManager)+0x1 at F:\Simuzen\simuzen_dev\Assets\simuzen\platform\systems\base\services\bundle\AssetsFromBundle\AssetBundleRefactor.cs:[34:13-34:78]
    Object System.Reflection.MonoMethod:Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)+0x38 at :-1
    Object System.Reflection.MethodBase:Invoke (Object, Object[])+0x6 at :-1
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x27c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[994:25-994:85]
    Void Zenject.DiContainer:InjectExplicit (Object, List`1)+0x52 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[882:13-891:20]
    Void Zenject.DiContainer:Inject (Object, IEnumerable`1)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1614:13-1615:66]
    Void Zenject.DiContainer:Inject (Object)+0x9 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1609:13-1609:47]
    Void Zenject.LazyInstanceInjector:LazyInjectAll ()+0x24 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\LazyInstanceInjector.cs:[55:17-55:45]
    Void Zenject.GameObjectContext:Construct (DiContainer, InstallerExtraArgs)+0xd8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\GameObjectContext.cs:[69:13-69:61]
    Object System.Reflection.MonoMethod:Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)+0x38 at :-1
    Object System.Reflection.MethodBase:Invoke (Object, Object[])+0x6 at :-1
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x27c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[994:25-994:85]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    GameObject Zenject.DiContainer:InstantiatePrefabExplicit (Object, List`1, GameObjectCreationParameters, Boolean)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1070:13-1071:55]
    GameObject Zenject.DiContainer:InstantiatePrefab (Object, IEnumerable`1, GameObjectCreationParameters)+0xb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1362:13-1363:88]
    DiContainer Zenject.SubContainerCreatorByPrefab:CreateSubContainer (List`1)+0x2c at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorByPrefab.cs:[28:13-29:61]
    DiContainer Zenject.SubContainerCreatorCached:CreateSubContainer (List`1)+0x22 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerCreators\SubContainerCreatorCached.cs:[25:17-25:91]
    Boolean <GetAllInstancesWithInjectSplit>d__6:MoveNext ()+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\SubContainerDependencyProvider.cs:[47:13-47:78]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1, Boolean)+0x94 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1539:17-1546:24]
    Void Zenject.DiContainer:InjectGameObjectExplicit (GameObject, Boolean, List`1)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[1513:13-1514:57]
    Boolean <Instantiate>d__10:MoveNext ()+0xa1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiator.cs:[58:13-59:74]
    Boolean <Instantiate>d__8:MoveNext ()+0xe0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\PrefabCreators\PrefabInstantiatorCached.cs:[65:17-65:45]
    Boolean <GetAllInstancesWithInjectSplit>d__4:MoveNext ()+0xfe at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\GetFromPrefabComponentProvider.cs:[52:17-52:55]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    Object Zenject.DiContainer:Resolve (InjectContext)+0xcb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[632:21-632:51]
    Object Zenject.DiContainer:InstantiateInternal (Type, Boolean, InjectArgs)+0x126 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[813:25-814:81]
    Object Zenject.DiContainer:InstantiateExplicit (Type, Boolean, InjectArgs)+0x6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[745:17-745:76]
    Boolean <GetAllInstancesWithInjectSplit>d__8:MoveNext ()+0xc0 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\TransientProvider.cs:[63:13-64:55]
    Boolean <GetAllInstancesWithInjectSplit>d__5:MoveNext ()+0xeb at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\CachedProvider.cs:[45:13-45:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    Object Zenject.DiContainer:Resolve (InjectContext)+0x195 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[649:13-649:65]
    Void Zenject.DiContainer:InjectExplicit (Object, Type, InjectArgs)+0x10b at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[938:21-940:87]
    Boolean <GetAllInstancesWithInjectSplit>d__12:MoveNext ()+0x141 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ComponentProviders\AddToGameObjectComponentProviders\AddToGameObjectComponentProviderBase.cs:[89:13-89:77]
    Boolean <GetAllInstancesWithInjectSplit>d__5:MoveNext ()+0x153 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\CachedProvider.cs:[56:17-56:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x3e at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[38:17-38:45]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    Boolean <GetAllInstancesWithInjectSplit>d__6:MoveNext ()+0x76 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\ResolveProvider.cs:[36:13-36:96]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext, List`1)+0x12 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[29:13-29:46]
    List`1 Zenject.IProviderExtensions:GetAllInstances (IProvider, InjectContext)+0x8 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Providers\IProviderExtensions.cs:[18:13-18:80]
    IEnumerable`1 Zenject.DiContainer:SafeGetInstances (IProvider, InjectContext)+0x7f at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[672:21-672:62]
    IEnumerable`1 <>c__DisplayClass55_0:<ResolveAll>b__0 (ProviderPair)+0x17 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:57-429:107]
    Object[] SelectManySingleSelectorIterator`2:ToArray ()+0x30 at :-1
    Object[] System.Linq.Enumerable:ToArray (IEnumerable`1)+0x20 at :-1
    IList Zenject.DiContainer:ResolveAll (InjectContext)+0x64 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[429:17-429:119]
    List`1 Zenject.DiContainer:ResolveDependencyRoots ()+0x29 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Main\DiContainer.cs:[237:13-237:64]
    Void Zenject.ProjectContext:Initialize ()+0xc6 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\ProjectContext.cs:[155:13-155:76]
    ProjectContext Zenject.ProjectContext:get_Instance ()+0x20 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\ProjectContext.cs:[53:21-53:44]
    Void Zenject.SceneContext:Awake ()+0x1 at F:\Simuzen\simuzen_dev\Assets\simuzen\CommonTools\zenject\Source\Install\Contexts\SceneContext.cs:[107:13-107:59]
     
  28. BAIZOR

    BAIZOR

    Joined:
    Jul 4, 2013
    Posts:
    112
    Can Zenject solve scene's dependencies by compile time (non-runtime) for performance reason?
     
  29. hottabych

    hottabych

    Joined:
    Apr 18, 2015
    Posts:
    107
    Hey, do you have any support channels in Slack or Discord?
     
  30. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    Last edited: Jun 14, 2019
  31. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
  32. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    I can't think of a reason that binding would cause the prefab to be instantiated twice. It could be a bug. Feel free to add an issue for it, maybe after you upgrade
     
  33. eventropy

    eventropy

    Joined:
    Oct 4, 2012
    Posts:
    255
    Sounds like you might be talking about reflection baking? If not, please elaborate
     
  34. BAIZOR

    BAIZOR

    Joined:
    Jul 4, 2013
    Posts:
    112
    I mean, that I have some structure of objects in a scene, which could be linked with each other in Editor.
    For ingame performance reason just save these links in Editor. After that on a mobile device the just load the scene, and the links exist here.

    My scene has hundreds (maybe even thousands) simple links, like Bind<SpriteRenderer>().FromComponentChildren() . 80% of them I can link in Editor.
     
    Mathijs_Bakker likes this.
  35. Mathijs_Bakker

    Mathijs_Bakker

    Joined:
    Apr 28, 2014
    Posts:
    25
    A little late for you and probably you found out through the GitHub docs. But maybe an answer for others.

    You can get support here on Gitter: community
    And also the Infallible Code's Discord has an #Extenject-Zenject channel: here
     
  36. Algok

    Algok

    Joined:
    Mar 3, 2017
    Posts:
    5
    Hi! I use Extenject. I created ScriptableObjectInstaller and SO from it. There are several ContextMenu on SO. The GetCurrentDifficult and GetHardDiffRoadSize menu works correctly, but GetCurrentDiffRoadSize always displays the same value despite the fact that I change OverallDifficult to SO. As if mainSettings in DifficultBasedSettingsGroups is an independent instance despite looking at .AsSingle () with its bind. All this happens without starting the scene.
    Code (CSharp):
    1. using System;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using Zenject;
    5.  
    6. namespace Installers {
    7.     [CreateAssetMenu(menuName = "Game/Game Settings")]
    8.     public class GameSettingsInstaller : ScriptableObjectInstaller<GameSettingsInstaller> {
    9.         public MainSettings      Main;
    10.         public RoadSettingsGroup Road;
    11.  
    12.         [Serializable]
    13.         public class RoadSettingsGroup {
    14.             public RoadBuilderSettingsGroups Build;
    15.         }
    16.  
    17.         [ContextMenu(nameof(GetCurrentDifficult))]
    18.         public void GetCurrentDifficult(){ //Ok
    19.             Debug.Log(Main.OverallDifficult);
    20.         }
    21.  
    22.         [ContextMenu(nameof(GetCurrentDiffRoadSize))]
    23.         public void GetCurrentDiffRoadSize(){//Bad
    24.             Debug.Log(Road.Build.GetObject().RoadSize);
    25.         }
    26.  
    27.         [ContextMenu(nameof(GetHardDiffRoadSize))]
    28.         public void GetHardDiffRoadSize(){ //Ok
    29.             Debug.Log(Road.Build.GetObject(MainSettings.Difficult.Hard).RoadSize);
    30.         }
    31.  
    32.  
    33.         [Serializable]
    34.         public class RoadBuilderSettingsGroups : DifficultBasedSettingsGroups<RoadBuilderSettingsGroup, RoadBuilder.Settings> {
    35.         }
    36.  
    37.         [Serializable]
    38.         public class DifficultBasedSettingsGroups<TParamsGroup, TParamsValue> : KeyValueGroups<TParamsGroup, MainSettings.Difficult, TParamsValue>
    39.             where TParamsGroup : IKeyValue<MainSettings.Difficult, TParamsValue> {
    40.             [Inject]
    41.             protected MainSettings mainSettings;
    42.  
    43.             public TParamsValue GetObject(){
    44.                 Debug.Log(mainSettings.OverallDifficult);
    45.                 return GetObject(mainSettings.OverallDifficult);
    46.             }
    47.         }
    48.  
    49.         [Serializable]
    50.         public class RoadBuilderSettingsGroup : DifficultBasedParams<RoadBuilder.Settings> {
    51.         }
    52.  
    53.         [Serializable]
    54.         public class DifficultBasedParams<P> : IKeyValue<MainSettings.Difficult, P> {
    55.             public MainSettings.Difficult Difficult;
    56.             public P                      Params;
    57.             public MainSettings.Difficult Key => Difficult;
    58.             public P Value => Params;
    59.         }
    60.  
    61.  
    62.         public override void InstallBindings(){
    63.             Container.BindInstance(Main).AsSingle();
    64.             Container.BindInstance(Road.Build).AsSingle();
    65.         }
    66.     }
    67. }
    68.  
    69.  
    70. public interface IKeyValue<K, V> {
    71.     K Key{ get; }
    72.     V Value{ get; }
    73. }
    74.  
    75. /// <summary>
    76. /// To display fields in the inspector, you need to specify TParamsGroup
    77. /// </summary>
    78. [Serializable]
    79. public class KeyValueGroups<TParamsGroup, TParamsKey, TParamsValue>
    80.     where TParamsGroup : IKeyValue<TParamsKey, TParamsValue> {
    81.     public List<TParamsGroup> Groups = new List<TParamsGroup>();
    82.     // public List<IKeyValue<TParamsKey, TParamsValue>> Groups = new List<IKeyValue<TParamsKey, TParamsValue>>();
    83.  
    84.     public TParamsValue GetObject(TParamsKey key) =>
    85.         Groups.Find(group => Equals(group.Key, key)).Value;
    86. }
    87.  
    88. /// <summary>
    89. /// Not displayed in inspector
    90. /// </summary>
    91. [Serializable]
    92. public class KeyValueGroups<TParamsKey, TParamsValue> {
    93.     public List<IKeyValue<TParamsKey, TParamsValue>> Groups = new List<IKeyValue<TParamsKey, TParamsValue>>();
    94.  
    95.     public TParamsValue GetObject(TParamsKey key) =>
    96.         Groups.Find(group => Equals(group.Key, key)).Value;
    97. }
    98.  
    99. [Serializable]
    100. public class MainSettings {
    101.     public Difficult OverallDifficult;
    102.  
    103.     public enum Difficult {
    104.         Easy,
    105.         Medium,
    106.         Hard,
    107.     }
    108. }
    109.  
    110. public class RoadBuilder {
    111.     [Serializable]
    112.     public class Settings {
    113.         public int       RoadSize;
    114.     }
    115. }
     
    Last edited: Feb 16, 2020
  37. Algok

    Algok

    Joined:
    Mar 3, 2017
    Posts:
    5
    I could not deal with this problem. I was told that Extenject might not work correctly outside of the playmode. But porting code from ContextMenu to the Start method gave similar results.
    I tried hardcode parameters from SO. But there were problems with [Inject]. The mainSettings field in DifficultBasedSettingsGroups is for some reason is null, despite its binding in GameSettingsInstaller2.
    Code (CSharp):
    1. namespace Installers {
    2.     [CreateAssetMenu(menuName = "Game/Game Settings")]
    3.     public class GameSettingsInstaller2 : ScriptableObjectInstaller<GameSettingsInstaller2> {
    4.         public MainSettings      Main;
    5.  
    6.  
    7.         public override void InstallBindings(){
    8.             Container.BindInstance(Main).AsSingle();
    9.         }
    10.     }
    11. }
    12.  
    13. [Serializable]
    14. public class MainSettings {
    15.     public Difficult OverallDifficult;
    16.  
    17.     public enum Difficult {
    18.         Easy,
    19.         Medium,
    20.         Hard,
    21.     }
    22. }
    Code (CSharp):
    1. public class NewBehaviourScript2 : MonoBehaviour {
    2.     private RoadBuilderSettingsGroups roadBuilderSettings = new RoadBuilderSettingsGroups(){
    3.         Groups = new List<IKeyValue<MainSettings.Difficult, RoadBuilder.Settings>>(){
    4.             new RoadBuilderSettingsGroup(){
    5.                 Difficult = MainSettings.Difficult.Hard,
    6.                 Params = new RoadBuilder.Settings(){
    7.                     RoadSize = 1,
    8.                 }
    9.             },
    10.             new RoadBuilderSettingsGroup(){
    11.                 Difficult = MainSettings.Difficult.Medium,
    12.                 Params = new RoadBuilder.Settings(){
    13.                     RoadSize = 2,
    14.                 }
    15.             },
    16.             new RoadBuilderSettingsGroup(){
    17.                 Difficult = MainSettings.Difficult.Easy,
    18.                 Params = new RoadBuilder.Settings(){
    19.                     RoadSize = 3,
    20.                 }
    21.             },
    22.         }
    23.     };
    24.  
    25.     private void Start(){
    26.         Debug.Log(roadBuilderSettings.GetObject().RoadSize);
    27.     }
    28. }
    29.  
    30. public class RoadBuilder {
    31.     [Serializable]
    32.     public class Settings {
    33.         public int RoadSize;
    34.     }
    35. }
    36.  
    37. [Serializable]
    38. public class RoadBuilderSettingsGroups : DifficultBasedSettingsGroups<RoadBuilder.Settings> {
    39. }
    40.  
    41. [Serializable]
    42. public class DifficultBasedSettingsGroups<TParamsValue> : KeyValueGroups<MainSettings.Difficult, TParamsValue> {
    43.     [Inject]
    44.     protected MainSettings mainSettings; //not bind?
    45.  
    46.     public TParamsValue GetObject(){
    47.         return GetObject(mainSettings.OverallDifficult); //mainSettings null
    48.     }
    49. }
    50.  
    51. [Serializable]
    52. public class KeyValueGroups<TParamsKey, TParamsValue> {
    53.     public List<IKeyValue<TParamsKey, TParamsValue>> Groups = new List<IKeyValue<TParamsKey, TParamsValue>>();
    54.  
    55.     public TParamsValue GetObject(TParamsKey key) =>
    56.         Groups.Find(group => Equals(group.Key, key)).Value;
    57. }
    58.  
    59.  
    60. [Serializable]
    61. public class RoadBuilderSettingsGroup : DifficultBasedParams<RoadBuilder.Settings> {
    62. }
    63.  
    64. [Serializable]
    65. public class DifficultBasedParams<P> : IKeyValue<MainSettings.Difficult, P> {
    66.     public MainSettings.Difficult Difficult;
    67.     public P                      Params;
    68.     public MainSettings.Difficult Key => Difficult;
    69.     public P Value => Params;
    70. }
    71.  
    72. public interface IKeyValue<K, V> {
    73.     K Key{ get; }
    74.     V Value{ get; }
    75. }
     
  38. koirat

    koirat

    Joined:
    Jul 7, 2012
    Posts:
    2,073
    Just noticed one thing.(BUG)
    When instantiating with Extenject Instantiator ugui object got it's RectTransform scale set to zero.

    Code below will instantiate two objects in a container the one instantiated with Instantiator will not be visible since it is scaled to (0,0,0)
    The container has HorizontalLayout component
    Code (csharp):
    1.  
    2. GameObject go1 = Instantiator.InstantiatePrefab(itemPrefab, Vector3.zero, Quaternion.identity, container);
    3. GameObject go2 = Instantiate(itemPrefab, Vector3.zero, Quaternion.identity, container);
    4.  
     
  39. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    Hey all, I ran into the following issue with Zenject recently. I have a number of MonoBehaviours, in a Unity scene (let's call it "Scene A"), and I use method injection to inject dependencies in them. When I run Scene A everything works fine. I have another scene ("Scene B"), which loads Scene A with
    SceneManager.LoadScene(sceneIndex)
    . The problem is that when I run Scene B and it then loads Scene A, the injection methods (the methods tagged with
    [Inject]
    ) in two of the MonoBehaviors do not get called at all. I put breakpoints in them and they don't get hit. The rest of the MonoBehaviors have their injection methods called just fine.

    I've tried to look for differences between the two MonoBehaviors for which injection methods do not get called and the other ones, but I am not seeing anything obvious.

    What could be causing this?
     
  40. Maeslezo

    Maeslezo

    Joined:
    Jun 16, 2015
    Posts:
    330
    I just tried with a toy example and it worked for me.

    I am using Extenject 9.1.0. Can you try with that version?

    These two MonoBehaviours that are not injected, do they have anything special?
     
  41. Raidenwins

    Raidenwins

    Joined:
    Dec 18, 2012
    Posts:
    132
    I am on Zenject 7.3.1. Is Extenject 9.1.0 backwards compatible with that? Would I have to make any code changes if I upgraded to Extenject 9.1.0?

    As far as I can tell, they don't have anything special. The only difference I can see is that the bindings for their dependencies are declared in the SceneContext for Scene A, while the bindings for some, but not all, of the other MonoBehaviours are in a combination of the SceneContext for Scene A and the ProjectContext. I have experimented with adding a dependency whose binding is declared in the ProjectContext to one of the two MonoBehaviours whose Inject methods are not called, and it didn't make a difference.
     
  42. Maeslezo

    Maeslezo

    Joined:
    Jun 16, 2015
    Posts:
    330
    Extenject is a fork so it should be compatible. Maybe you need to do some minor changes, I am not sure about that. But you can try and see if it's a fixed bug
     
  43. CrimSilk

    CrimSilk

    Joined:
    Oct 25, 2016
    Posts:
    2
    Hi all!

    I'm currently working with Subcontainers but there is something that I don't get.
    As far as I understood from the documentation subcontainers inherit all bindings from their parent containers.

    However this doesn't seem to be the case in my instance.

    Code (CSharp):
    1. Container.BindFactory<Foo, Foo.Factory>()
    2.                 .FromSubContainerResolve()
    3.                 .ByNewContextPrefab<FooGameObjectInstaller>(fooPrefab);
    4.          
    5. // Controllers
    6. Container.BindInterfacesAndSelfTo<BarController>().FromComponentOnRoot();
    Now I would expect that I can Inject the BarController into any class that is in the Foo subcontainer.
    However this doesn't work.

    Any ideas what I might do wrong?

    Things like CopyIntoAllSubcontainers doesn't work because it only copies the binding but not the actual instance. So FromComponentOnRoot would not be able to be resolved in the subcontainer.