133 lines
4.7 KiB
C#
133 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using ModestTree;
|
|
using System.Linq;
|
|
|
|
#if !NOT_UNITY3D
|
|
using UnityEngine;
|
|
#endif
|
|
|
|
namespace Zenject
|
|
{
|
|
[NoReflectionBaking]
|
|
public class FromBinderGeneric<TContract> : FromBinder
|
|
{
|
|
public FromBinderGeneric(
|
|
DiContainer bindContainer,
|
|
BindInfo bindInfo,
|
|
BindStatement bindStatement)
|
|
: base(bindContainer, bindInfo, bindStatement)
|
|
{
|
|
BindingUtil.AssertIsDerivedFromTypes(typeof(TContract), BindInfo.ContractTypes);
|
|
}
|
|
|
|
// Shortcut for FromIFactory and also for backwards compatibility
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromFactory<TFactory>()
|
|
where TFactory : IFactory<TContract>
|
|
{
|
|
return FromIFactory(x => x.To<TFactory>().AsCached());
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromIFactory(
|
|
Action<ConcreteBinderGeneric<IFactory<TContract>>> factoryBindGenerator)
|
|
{
|
|
return FromIFactoryBase<TContract>(factoryBindGenerator);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromMethod(Func<TContract> method)
|
|
{
|
|
return FromMethodBase<TContract>(ctx => method());
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromMethod(Func<InjectContext, TContract> method)
|
|
{
|
|
return FromMethodBase<TContract>(method);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromMethodMultiple(Func<InjectContext, IEnumerable<TContract>> method)
|
|
{
|
|
BindingUtil.AssertIsDerivedFromTypes(typeof(TContract), AllParentTypes);
|
|
return FromMethodMultipleBase<TContract>(method);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveGetter<TObj>(Func<TObj, TContract> method)
|
|
{
|
|
return FromResolveGetter<TObj>(null, method);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveGetter<TObj>(object identifier, Func<TObj, TContract> method)
|
|
{
|
|
return FromResolveGetter<TObj>(identifier, method, InjectSources.Any);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveGetter<TObj>(object identifier, Func<TObj, TContract> method, InjectSources source)
|
|
{
|
|
return FromResolveGetterBase<TObj, TContract>(identifier, method, source, false);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveAllGetter<TObj>(Func<TObj, TContract> method)
|
|
{
|
|
return FromResolveAllGetter<TObj>(null, method);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveAllGetter<TObj>(object identifier, Func<TObj, TContract> method)
|
|
{
|
|
return FromResolveAllGetter<TObj>(identifier, method, InjectSources.Any);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromResolveAllGetter<TObj>(object identifier, Func<TObj, TContract> method, InjectSources source)
|
|
{
|
|
return FromResolveGetterBase<TObj, TContract>(identifier, method, source, true);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromInstance(TContract instance)
|
|
{
|
|
return FromInstanceBase(instance);
|
|
}
|
|
|
|
#if !NOT_UNITY3D
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromComponentsInChildren(
|
|
Func<TContract, bool> predicate, bool includeInactive = true)
|
|
{
|
|
return FromComponentsInChildren(false, predicate, includeInactive);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromComponentsInChildren(
|
|
bool excludeSelf = false, Func<TContract, bool> predicate = null, bool includeInactive = true)
|
|
{
|
|
Func<Component, bool> subPredicate;
|
|
|
|
if (predicate != null)
|
|
{
|
|
subPredicate = component => predicate((TContract)(object)component);
|
|
}
|
|
else
|
|
{
|
|
subPredicate = null;
|
|
}
|
|
|
|
return FromComponentsInChildrenBase(
|
|
excludeSelf, subPredicate, includeInactive);
|
|
}
|
|
|
|
public ScopeConcreteIdArgConditionCopyNonLazyBinder FromComponentsInHierarchy(
|
|
Func<TContract, bool> predicate = null, bool includeInactive = true)
|
|
{
|
|
Func<Component, bool> subPredicate;
|
|
|
|
if (predicate != null)
|
|
{
|
|
subPredicate = component => predicate((TContract)(object)component);
|
|
}
|
|
else
|
|
{
|
|
subPredicate = null;
|
|
}
|
|
|
|
return FromComponentsInHierarchyBase(subPredicate, includeInactive);
|
|
}
|
|
#endif
|
|
}
|
|
}
|