- Home /
Singleton Toolbox compile error
I'm trying to use the Toolbox Singleton implementation you can find here: http://wiki.unity3d.com/index.php/Toolbox
From my main game controller I'm trying to register my map loader component in the following way:
 using UnityEngine;
 using System.Collections;
     
 public class MainGameController : MonoBehaviour {
     
     void Awake(){
         Screen.SetResolution (Screen.height, Screen.width, true);
         MapLoader mLoader = Toolbox.Instance.RegisterComponent<MapLoader>();
     }
 }
But in the console window of unity I get the following compile error:
Assets/Scripts/MainGameController.cs(11,54): error CS0176: Static member `Toolbox.RegisterComponent()' cannot be accessed with an instance reference, qualify it with a type name instead
I'm not really experienced with unity game dev nor with C# generics, so I can't find what I'm doing wrong.
This is the map loader class
 using UnityEngine;
 using System.Collections;
 
 [System.Serializable]
 public class MapLoader {
 
     private ArrayList tilesInstances = new ArrayList();
 
     public ArrayList TilesInstances
     {
         get { return tilesInstances; }
     }
 
     private void LoadMap()
     {
         //Do some stuff
     }
 
 }
Was this ever resolved? I am experiencing the same issue (and posted a similar question here: http://forum.unity3d.com/threads/help-with-singleton-toolbox-pattern-implementation.411040/)
Answer by Bunny83 · Jun 18, 2016 at 07:01 PM
The error is quite clear what you did wrong. Just have a look at the declaration of the RegisterComponent method:
 static public T RegisterComponent<T> () where T: Component {
     return Instance.GetOrAddComponent<T>();
 }
The method is a static method, not an instance method. So you just have to use:
 MapLoader mLoader = Toolbox.RegisterComponent<MapLoader>();
As you can see the method RegisterComponent uses the "Instance" property internally to access the singleton instance. That method is just a shortcut for:
 Toolbox.Instance.GetOrAddComponent<MapLoader>();
 // is the same as:
 //Toolbox.RegisterComponent<MapLoader>();
Answer by rhysp · Jun 19, 2016 at 04:53 AM
@shadowking I seem to have resolved this through much trial and error. The issue I had was the example implementation writes:
MyComponent myComponent = Toolbox.Instance.RegisterComponent<MyComponent>();
But it worked once I changed this too (removing the 'Instance' request):
MyComponent myComponent = Toolbox.RegisterComponent<MyComponent>();
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                