Files
dungeons/Assets/Plugins/Zenject/Source/Binding/Binders/SubContainerBinder.cs

317 lines
13 KiB
C#

using System;
using ModestTree;
namespace Zenject
{
[NoReflectionBaking]
public class SubContainerBinder
{
readonly BindInfo _bindInfo;
readonly BindStatement _bindStatement;
readonly object _subIdentifier;
readonly bool _resolveAll;
public SubContainerBinder(
BindInfo bindInfo,
BindStatement bindStatement,
object subIdentifier, bool resolveAll)
{
_bindInfo = bindInfo;
_bindStatement = bindStatement;
_subIdentifier = subIdentifier;
_resolveAll = resolveAll;
// Reset in case the user ends the binding here
bindStatement.SetFinalizer(null);
}
protected IBindingFinalizer SubFinalizer
{
set { _bindStatement.SetFinalizer(value); }
}
public ScopeConcreteIdArgConditionCopyNonLazyBinder ByInstance(DiContainer subContainer)
{
SubFinalizer = new SubContainerBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(_) => new SubContainerCreatorByInstance(subContainer));
return new ScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo);
}
public ScopeConcreteIdArgConditionCopyNonLazyBinder ByInstanceGetter(
Func<InjectContext, DiContainer> subContainerGetter)
{
SubFinalizer = new SubContainerBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(_) => new SubContainerCreatorByInstanceGetter(subContainerGetter));
return new ScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo);
}
public
#if NOT_UNITY3D
WithKernelScopeConcreteIdArgConditionCopyNonLazyBinder
#else
WithKernelDefaultParentScopeConcreteIdArgConditionCopyNonLazyBinder
#endif
ByInstaller<TInstaller>()
where TInstaller : InstallerBase
{
return ByInstaller(typeof(TInstaller));
}
public
#if NOT_UNITY3D
WithKernelScopeConcreteIdArgConditionCopyNonLazyBinder
#else
WithKernelDefaultParentScopeConcreteIdArgConditionCopyNonLazyBinder
#endif
ByInstaller(Type installerType)
{
Assert.That(installerType.DerivesFrom<InstallerBase>(),
"Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType);
var subContainerBindInfo = new SubContainerCreatorBindInfo();
SubFinalizer = new SubContainerBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByInstaller(container, subContainerBindInfo, installerType));
return new
#if NOT_UNITY3D
WithKernelScopeConcreteIdArgConditionCopyNonLazyBinder
#else
WithKernelDefaultParentScopeConcreteIdArgConditionCopyNonLazyBinder
#endif
(subContainerBindInfo, _bindInfo);
}
public
#if NOT_UNITY3D
WithKernelScopeConcreteIdArgConditionCopyNonLazyBinder
#else
WithKernelDefaultParentScopeConcreteIdArgConditionCopyNonLazyBinder
#endif
ByMethod(Action<DiContainer> installerMethod)
{
var subContainerBindInfo = new SubContainerCreatorBindInfo();
SubFinalizer = new SubContainerBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByMethod(container, subContainerBindInfo, installerMethod));
return new
#if NOT_UNITY3D
WithKernelScopeConcreteIdArgConditionCopyNonLazyBinder
#else
WithKernelDefaultParentScopeConcreteIdArgConditionCopyNonLazyBinder
#endif
(subContainerBindInfo, _bindInfo);
}
#if !NOT_UNITY3D
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewGameObjectMethod(
Action<DiContainer> installerMethod)
{
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewGameObjectMethod(
container, gameObjectInfo, installerMethod));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabMethod(
Func<InjectContext, UnityEngine.Object> prefabGetter, Action<DiContainer> installerMethod)
{
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabMethod(
container,
new PrefabProviderCustom(prefabGetter),
gameObjectInfo, installerMethod));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabMethod(
UnityEngine.Object prefab, Action<DiContainer> installerMethod)
{
BindingUtil.AssertIsValidPrefab(prefab);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabMethod(
container,
new PrefabProvider(prefab),
gameObjectInfo, installerMethod));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewGameObjectInstaller<TInstaller>()
where TInstaller : InstallerBase
{
return ByNewGameObjectInstaller(typeof(TInstaller));
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewGameObjectInstaller(Type installerType)
{
Assert.That(installerType.DerivesFrom<InstallerBase>(),
"Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewGameObjectInstaller(
container, gameObjectInfo, installerType, _bindInfo.Arguments));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabInstaller<TInstaller>(
Func<InjectContext, UnityEngine.Object> prefabGetter)
where TInstaller : InstallerBase
{
return ByNewPrefabInstaller(prefabGetter, typeof(TInstaller));
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabInstaller(
Func<InjectContext, UnityEngine.Object> prefabGetter, Type installerType)
{
Assert.That(installerType.DerivesFrom<InstallerBase>(),
"Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabInstaller(
container,
new PrefabProviderCustom(prefabGetter),
gameObjectInfo, installerType, _bindInfo.Arguments));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabInstaller<TInstaller>(
UnityEngine.Object prefab)
where TInstaller : InstallerBase
{
return ByNewPrefabInstaller(prefab, typeof(TInstaller));
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabInstaller(
UnityEngine.Object prefab, Type installerType)
{
Assert.That(installerType.DerivesFrom<InstallerBase>(),
"Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabInstaller(
container,
new PrefabProvider(prefab),
gameObjectInfo, installerType, _bindInfo.Arguments));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabResourceMethod(
string resourcePath, Action<DiContainer> installerMethod)
{
BindingUtil.AssertIsValidResourcePath(resourcePath);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabMethod(
container,
new PrefabProviderResource(resourcePath),
gameObjectInfo, installerMethod));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabResourceInstaller<TInstaller>(
string resourcePath)
where TInstaller : InstallerBase
{
return ByNewPrefabResourceInstaller(resourcePath, typeof(TInstaller));
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabResourceInstaller(
string resourcePath, Type installerType)
{
BindingUtil.AssertIsValidResourcePath(resourcePath);
Assert.That(installerType.DerivesFrom<InstallerBase>(),
"Invalid installer type given during bind command. Expected type '{0}' to derive from 'Installer<>'", installerType);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefabInstaller(
container,
new PrefabProviderResource(resourcePath),
gameObjectInfo, installerType, _bindInfo.Arguments));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
[System.Obsolete("ByNewPrefab has been renamed to ByNewContextPrefab to avoid confusion with ByNewPrefabInstaller and ByNewPrefabMethod")]
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefab(UnityEngine.Object prefab)
{
return ByNewContextPrefab(prefab);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewContextPrefab(UnityEngine.Object prefab)
{
BindingUtil.AssertIsValidPrefab(prefab);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefab(
container, new PrefabProvider(prefab), gameObjectInfo));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
[System.Obsolete("ByNewPrefabResource has been renamed to ByNewContextPrefabResource to avoid confusion with ByNewPrefabResourceInstaller and ByNewPrefabResourceMethod")]
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewPrefabResource(string resourcePath)
{
return ByNewContextPrefabResource(resourcePath);
}
public NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder ByNewContextPrefabResource(string resourcePath)
{
BindingUtil.AssertIsValidResourcePath(resourcePath);
var gameObjectInfo = new GameObjectCreationParameters();
SubFinalizer = new SubContainerPrefabBindingFinalizer(
_bindInfo, _subIdentifier, _resolveAll,
(container) => new SubContainerCreatorByNewPrefab(
container, new PrefabProviderResource(resourcePath), gameObjectInfo));
return new NameTransformScopeConcreteIdArgConditionCopyNonLazyBinder(_bindInfo, gameObjectInfo);
}
#endif
}
}