Making AR Development Easier with Dependency Injection

Managing dependencies between different components can become challenging. That's where the Dependency Injector by augg.io comes in.

Ever found yourself wrestling with complex AR projects in Unity? You're not alone. As your AR applications grow, managing how different parts of your code work together can quickly become a headache. That's exactly why we built the Dependency Injector at augg.io - to make your life as a Unity developer easier.

Check out the Dependency Injector at dependency-injector.augg.io.

Let's Talk About Dependency Injection

Picture this: you're building an AR app that needs to access the device's camera, handle calibration, and track analytics. Without proper organization, your code can quickly turn into a tangled mess where everything depends on everything else. It's like trying to untangle headphones that have been in your pocket all day - not fun.

  • This is where dependency injection shines. It's like having a smart assistant that:

  • Keeps track of all your code's relationships

  • Lets different parts of your code work independently

  • Makes testing a breeze

  • Helps you write cleaner, more organized code

Why Unity Makes This Tricky

If you've worked with Unity before, you know it does things its own way. This creates some unique challenges:

  1. Unity likes to create components itself

  2. You can't easily inject dependencies through constructors when using MonoBehaviours

  3. When using IL2CPP builds, Unity's code stripping can break things in mysterious ways

We built our Dependency Injector specifically to handle these Unity quirks while keeping things simple and intuitive for AR developers.

Cool Features That Make Your Life Easier

Simple Setup with Attributes

Want to keep your code clean and easy to read? We use C# attributes to make things super straightforward:


[Bean]
public class ARSessionManager
{
    public void ConfigureSession(ARSessionConfig config) { }
}

public class ARSceneController : MonoBehaviour
{
    [Injected]
    private ARSessionManager sessionManager;

    void Start()
    {
        Injector.Instance.Inject(this);
        
        var config = new ARSessionConfig 
        { 
            LightEstimationMode = LightEstimationMode.AmbientIntensity 
        };
        sessionManager.ConfigureSession(config

Smart Interface Handling

Need your camera system to work across different platforms? No problem. Here's how easy it is:


public interface ICameraService
{
    void StartCapture(CameraConfig config);
    void StopCapture();
}

[Bean]
public class ARKitCameraService : ICameraService
{
    public void StartCapture(CameraConfig config) { }
    public void StopCapture() { }
}

public class ARViewController : MonoBehaviour
{
    [InjectedInterface(typeof(ARKitCameraService))]
    private ICameraService cameraService

Build Protection That Actually Works

Remember those IL2CPP build issues we mentioned? Our system handles them automatically, so your app works reliably in production. No more last-minute surprises when building!

Getting Started is a Breeze

Here's all you need to do:

  1. Drop the package into your Unity project

  2. Set up DependencyInjectorSetup in your execution order

  3. Add the Injector script to your first scene

  4. Start using [Bean] and [Injected] attributes in your code

Pro Tips for Success

Here's what we've learned from real-world usage: - Use [Bean] for services that should only exist once (like session managers) - Use interface injection when you need different implementations for different platforms - Always call Inject() in Start() for MonoBehaviours - Test your setup with IL2CPP builds before shipping

Performance? We've Got You Covered

We know AR apps need to run smoothly, so we've optimized everything: - We cache singleton instances for quick access - We use reflection sparingly and efficiently - Our build preprocessing ensures top performance at runtime

Wrapping Up

Building AR apps is challenging enough without having to worry about dependency management. Our Dependency Injector handles the complex stuff so you can focus on creating amazing AR experiences. Whether you're building a simple product visualizer or a complex spatial computing app, proper dependency management makes your development process smoother and your code better.

We've built this tool to solve real problems we've faced in Unity AR development. It handles those tricky Unity-specific issues like IL2CPP builds and MonoBehaviour lifecycles, so you don't have to.

Ready to make your AR development life easier? Check out the Dependency Injector at dependency-injector.augg.io.

Text by:

Pavel Kašelják

Published on

Feb 10, 2025

Share this article

augg.io s.r.o. • Světova 523/1, 180 00, Praha 8, Czech Republic • IČ: 173 94 155

©augg.io s.r.o, all rights reserved

This project was implemented with the financial support of the Technology Incubation Programme.

augg.io s.r.o.
Světova 523/1, 180 00,

Praha 8, Czech Republic

IČ: 173 94 155

©augg.io s.r.o, all rights reserved

This project was implemented with the financial support of the Technology Incubation Programme.

augg.io s.r.o. • Světova 523/1, 180 00, Praha 8,
Czech Republic • IČ: 173 94 155

©augg.io s.r.o, all rights reserved

This project was implemented with the financial support of the Technology Incubation Programme.