ssannandeji / Zenject-2019

Dependency Injection Framework for Unity3D
MIT License
2.53k stars 363 forks source link

tried to create scriptable object installer and move prefab reference from monoinstaller in it, got an error #460

Closed Pavelko007 closed 6 years ago

Pavelko007 commented 6 years ago

ZenjectException: Unable to resolve type 'Snake.Installers.GameSettings' while building object with type 'Snake.Installers.GameInstaller'. Object graph: GameInstaller

Zenject.DiContainer.Resolve (Zenject.InjectContext context) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:753) Zenject.DiContainer.InjectExplicitInternal (System.Object injectable, System.Type injectableType, Zenject.InjectArgs args) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:1094) Zenject.DiContainer.InjectExplicit (System.Object injectable, System.Type injectableType, Zenject.InjectArgs args) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:1046) Zenject.DiContainer.InjectExplicit (System.Object injectable, System.Collections.Generic.List1 extraArgs) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:1008) Zenject.DiContainer.Inject (System.Object injectable, IEnumerable1 extraArgs) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:1794) Zenject.DiContainer.Inject (System.Object injectable) (at Assets/Plugins/Zenject/Source/Main/DiContainer.cs:1788) Zenject.Context.InstallInstallers (System.Collections.Generic.List1 normalInstallers, System.Collections.Generic.List1 normalInstallerTypes, System.Collections.Generic.List1 scriptableObjectInstallers, System.Collections.Generic.List1 installers, System.Collections.Generic.List1 installerPrefabs) (at Assets/Plugins/Zenject/Source/Install/Contexts/Context.cs:192) Zenject.Context.InstallInstallers () (at Assets/Plugins/Zenject/Source/Install/Contexts/Context.cs:134) Zenject.SceneContext.InstallBindings (System.Collections.Generic.List1 injectableMonoBehaviours) (at Assets/Plugins/Zenject/Source/Install/Contexts/SceneContext.cs:306) Zenject.SceneContext.Install () (at Assets/Plugins/Zenject/Source/Install/Contexts/SceneContext.cs:254) Zenject.SceneContext.RunInternal () (at Assets/Plugins/Zenject/Source/Install/Contexts/SceneContext.cs:136) Zenject.RunnableContext.Run () (at Assets/Plugins/Zenject/Source/Install/Contexts/RunnableContext.cs:36) Zenject.RunnableContext.Initialize () (at Assets/Plugins/Zenject/Source/Install/Contexts/RunnableContext.cs:22) Zenject.SceneContext.Awake () (at Assets/Plugins/Zenject/Source/Install/Contexts/SceneContext.cs:113)

Pavelko007 commented 6 years ago
public class GameInstaller : MonoInstaller<GameInstaller>
{
        [Inject]
        GameSettings settings;

        public override void InstallBindings()
        {
            Container.BindFactory<Snake, Snake.Factory>().FromComponentInNewPrefab(settings.SnakePrefab);
        }
}
Pavelko007 commented 6 years ago
[Serializable]
    public class GameSettings
    {
        public GameObject SnakePrefab;
    }
Pavelko007 commented 6 years ago
[CreateAssetMenu(fileName = "GameSettings", menuName = "Installers/GameSettings")]
    public class GameSettingsInstaller : ScriptableObjectInstaller<GameSettingsInstaller>
    {
        public GameSettings gameSettings;

        public override void InstallBindings()
        {
            Container.BindInstance(gameSettings);
        }
    }