128 lines
3.9 KiB
C#
128 lines
3.9 KiB
C#
#if !NOT_UNITY3D
|
|
|
|
using ModestTree;
|
|
using UnityEngine;
|
|
|
|
namespace Zenject
|
|
{
|
|
// This factory type can be useful if you want to control where the prefab comes from at runtime
|
|
// rather than from within the installers
|
|
|
|
//No parameters
|
|
public class PrefabFactory<T> : IFactory<UnityEngine.Object, T>
|
|
//where T : Component
|
|
{
|
|
[Inject]
|
|
readonly DiContainer _container = null;
|
|
|
|
public DiContainer Container
|
|
{
|
|
get { return _container; }
|
|
}
|
|
|
|
public virtual T Create(UnityEngine.Object prefab)
|
|
{
|
|
Assert.That(prefab != null,
|
|
"Null prefab given to factory create method when instantiating object with type '{0}'.", typeof(T));
|
|
|
|
return _container.InstantiatePrefabForComponent<T>(prefab);
|
|
}
|
|
|
|
// Note: We can't really validate here without access to the prefab
|
|
// We could validate the class directly with the current container but that fails when the
|
|
// class is inside a GameObjectContext
|
|
}
|
|
|
|
// One parameter
|
|
public class PrefabFactory<P1, T> : IFactory<UnityEngine.Object, P1, T>
|
|
//where T : Component
|
|
{
|
|
[Inject]
|
|
readonly DiContainer _container = null;
|
|
|
|
public DiContainer Container
|
|
{
|
|
get { return _container; }
|
|
}
|
|
|
|
public virtual T Create(UnityEngine.Object prefab, P1 param)
|
|
{
|
|
Assert.That(prefab != null,
|
|
"Null prefab given to factory create method when instantiating object with type '{0}'.", typeof(T));
|
|
|
|
return (T)_container.InstantiatePrefabForComponentExplicit(
|
|
typeof(T), prefab, InjectUtil.CreateArgListExplicit(param));
|
|
}
|
|
}
|
|
|
|
// Two parameters
|
|
public class PrefabFactory<P1, P2, T> : IFactory<UnityEngine.Object, P1, P2, T>
|
|
//where T : Component
|
|
{
|
|
[Inject]
|
|
readonly DiContainer _container = null;
|
|
|
|
public DiContainer Container
|
|
{
|
|
get { return _container; }
|
|
}
|
|
|
|
public virtual T Create(UnityEngine.Object prefab, P1 param, P2 param2)
|
|
{
|
|
Assert.That(prefab != null,
|
|
"Null prefab given to factory create method when instantiating object with type '{0}'.", typeof(T));
|
|
|
|
return (T)_container.InstantiatePrefabForComponentExplicit(
|
|
typeof(T), prefab, InjectUtil.CreateArgListExplicit(param, param2));
|
|
}
|
|
}
|
|
|
|
// Three parameters
|
|
public class PrefabFactory<P1, P2, P3, T> : IFactory<UnityEngine.Object, P1, P2, P3, T>
|
|
//where T : Component
|
|
{
|
|
[Inject]
|
|
readonly DiContainer _container = null;
|
|
|
|
public DiContainer Container
|
|
{
|
|
get { return _container; }
|
|
}
|
|
|
|
public virtual T Create(UnityEngine.Object prefab, P1 param, P2 param2, P3 param3)
|
|
{
|
|
Assert.That(prefab != null,
|
|
"Null prefab given to factory create method when instantiating object with type '{0}'.", typeof(T));
|
|
|
|
return (T)_container.InstantiatePrefabForComponentExplicit(
|
|
typeof(T), prefab, InjectUtil.CreateArgListExplicit(param, param2, param3));
|
|
}
|
|
}
|
|
|
|
// Four parameters
|
|
public class PrefabFactory<P1, P2, P3, P4, T> : IFactory<UnityEngine.Object, P1, P2, P3, P4, T>
|
|
//where T : Component
|
|
{
|
|
[Inject]
|
|
readonly DiContainer _container = null;
|
|
|
|
public DiContainer Container
|
|
{
|
|
get { return _container; }
|
|
}
|
|
|
|
public virtual T Create(UnityEngine.Object prefab, P1 param, P2 param2, P3 param3, P4 param4)
|
|
{
|
|
Assert.That(prefab != null,
|
|
"Null prefab given to factory create method when instantiating object with type '{0}'.", typeof(T));
|
|
|
|
return (T)_container.InstantiatePrefabForComponentExplicit(
|
|
typeof(T), prefab, InjectUtil.CreateArgListExplicit(param, param2, param3, param4));
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
|