Skip to content

byme8/UnityIoC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnityIoC

UnityIoC it's plugin for Unity3D which brings IoC containering to your games. Here is example how to use it:

Register service:

public interface ISettingsManager
{
    string Name
    {
        get;
        set;
    }
}

//
// Register singletone of SettingsManager as ISettingsManager.
//
[Register(typeof(ISettingsManager), Reuse.Singletone)]
public class SettingsManager : ISettingsManager
{
    public SettingsManager()
    {
        this.Name = "Jek";
    }

    public string Name
    {
        get;
        set;
    }
}

Use registered service in MonoBehaviour by inhereting from InjectableMonoBehaviour.

public class MainInjectableMonoBehaviour : InjectableMonoBehaviour
{
    [Dependency]
    ISettingsManager settingsManager;

    private void Start()
    {
        Debug.Log("Name from resolved dependecy: " + this.settingsManager.Name);
    }
}

Use registered service by container Dependency without inhereting.

public class MainWithDependency : MonoBehaviour
{
    Dependency<ISettingsManager> settingsManager;

    private void Start()
    {
        Debug.Log("Name from resolved dependecy(class): " + this.settingsManager.Value.Name);
    }
}

If you require to setup container manually you can use IContainerSetuper interface, here is example:

public class SomeContainerSetuper : IContainerSetuper
{
    public readonly Dependency<ISettingsManager> Settings;

    public void Setup(IContainer container)
    {
        Debug.Log("Name from setuper: " + this.Settings.Value.Name);
        Debug.Log(string.Format("Registered {0} services", container.GetServiceRegistrations().Count()));
    }
}

According to benchmarks on my machine it cost ~100ms of startup time to find all classes marked with attributes.

When you are inhereting from InjectableMonoBehaviour and using Dependency attribute to mark dependency it will cost additional 354ns(1ms = 1000ns) to find dependencies for current instance and plus 354ns per dependency to resolve.

When you using container Dependency method for resolving it will cost 34ns per dependency. So, I would like to recomend you to use this method for defining your dependencies.

If you found some bug or have a question don't hesitate to create issues.

About

UnityIoC it's plugin for Unity3D which brings IoC containering to your games

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages