It is used to create objects that do not derive from MonoBehaviour. When inheriting this class, the objects and parameters to be created must be defined as types.
Sample uses:
public class Installer : GameObjectInstaller
{
public override void Install(DIContainer container)
{
container.BindFactory<FooItem.Factory>();
container.BindFactory<FooItemWithoutParam.Factory>();
}
}
public class SampleClass : MonoInjecter
{
[Inject]
private readonly FooItem.Factory _fooItemFactory;
[Inject]
private readonly FooItemWithoutParam.Factory _fooItemWithoutParamFactory;
protected override void Awake()
{
base.Awake();
FooItem fooItem = _fooItemFactory.Create(26);
FooItemWithoutParam fooItemWithoutParam = _fooItemWithoutParamFactory.Create();
}
}
public class FooItem : IFactorable<int>
{
private readonly Foo _foo;
public FooItem(Foo foo)
{
_foo = foo;
}
public void InitializeFactory(int variable)
{
Debug.Log($"{_foo.index}: int variable is: {variable}");
}
public class Factory : SeparatedObjectFactory<FooItem, int> { }
}
public class FooItemWithoutParam : IFactorable
{
private readonly Foo _foo;
public FooItemWithoutParam(Foo foo)
{
_foo = foo;
}
public class Factory : SeparatedObjectFactory<FooItemWithoutParam> { }
}