/
GeekNerd
/
ServerModelingProject
Обзор
Документация
Войти
/
GeekNerd
/
ServerModelingProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Assets/Plugins/Zenject/Source/Providers/SubContainerCreators/SubContainerCreatorByMethod.cs
390 строк
13 KB
Gorney-Alex
Init
30 май 2026, 19:05
30 май 2026, 19:05
3cdcc49
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using ModestTree; namespace Zenject { // Zero parameters [NoReflectionBaking] public abstract class SubContainerCreatorByMethodBase : ISubContainerCreator { readonly DiContainer _container; readonly SubContainerCreatorBindInfo _containerBindInfo; public SubContainerCreatorByMethodBase( DiContainer container, SubContainerCreatorBindInfo containerBindInfo) { _container = container; _containerBindInfo = containerBindInfo; } public abstract DiContainer CreateSubContainer( List<TypeValuePair> args, InjectContext context, out Action injectAction); protected DiContainer CreateEmptySubContainer() { var subContainer = _container.CreateSubContainer(); SubContainerCreatorUtil.ApplyBindSettings(_containerBindInfo, subContainer); return subContainer; } } [NoReflectionBaking] public class SubContainerCreatorByMethod : SubContainerCreatorByMethodBase { readonly Action<DiContainer> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, Action<DiContainer> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEmpty(args); var subContainer = CreateEmptySubContainer(); _installMethod(subContainer); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // One parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1> : SubContainerCreatorByMethodBase { readonly Action<DiContainer, TParam1> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, Action<DiContainer, TParam1> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 1); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); var subContainer = CreateEmptySubContainer(); _installMethod(subContainer, (TParam1)args[0].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // Two parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2> : SubContainerCreatorByMethodBase { readonly Action<DiContainer, TParam1, TParam2> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, Action<DiContainer, TParam1, TParam2> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 2); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // Three parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2, TParam3> : SubContainerCreatorByMethodBase { readonly Action<DiContainer, TParam1, TParam2, TParam3> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, Action<DiContainer, TParam1, TParam2, TParam3> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 3); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); Assert.That(args[2].Type.DerivesFromOrEqual<TParam3>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // Four parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2, TParam3, TParam4> : SubContainerCreatorByMethodBase { readonly #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 4); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); Assert.That(args[2].Type.DerivesFromOrEqual<TParam3>()); Assert.That(args[3].Type.DerivesFromOrEqual<TParam4>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // Five parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2, TParam3, TParam4, TParam5> : SubContainerCreatorByMethodBase { readonly #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 5); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); Assert.That(args[2].Type.DerivesFromOrEqual<TParam3>()); Assert.That(args[3].Type.DerivesFromOrEqual<TParam4>()); Assert.That(args[4].Type.DerivesFromOrEqual<TParam5>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // Six parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2, TParam3, TParam4, TParam5, TParam6> : SubContainerCreatorByMethodBase { readonly #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5, TParam6> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5, TParam6> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 5); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); Assert.That(args[2].Type.DerivesFromOrEqual<TParam3>()); Assert.That(args[3].Type.DerivesFromOrEqual<TParam4>()); Assert.That(args[4].Type.DerivesFromOrEqual<TParam5>()); Assert.That(args[5].Type.DerivesFromOrEqual<TParam6>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value, (TParam6)args[5].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } // 10 parameters [NoReflectionBaking] public class SubContainerCreatorByMethod<TParam1, TParam2, TParam3, TParam4, TParam5, TParam6, TParam7, TParam8, TParam9, TParam10> : SubContainerCreatorByMethodBase { readonly #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5, TParam6, TParam7, TParam8, TParam9, TParam10> _installMethod; public SubContainerCreatorByMethod( DiContainer container, SubContainerCreatorBindInfo containerBindInfo, #if !NET_4_6 ModestTree.Util. #endif Action<DiContainer, TParam1, TParam2, TParam3, TParam4, TParam5, TParam6, TParam7, TParam8, TParam9, TParam10> installMethod) : base(container, containerBindInfo) { _installMethod = installMethod; } public override DiContainer CreateSubContainer(List<TypeValuePair> args, InjectContext context, out Action injectAction) { Assert.IsEqual(args.Count, 10); Assert.That(args[0].Type.DerivesFromOrEqual<TParam1>()); Assert.That(args[1].Type.DerivesFromOrEqual<TParam2>()); Assert.That(args[2].Type.DerivesFromOrEqual<TParam3>()); Assert.That(args[3].Type.DerivesFromOrEqual<TParam4>()); Assert.That(args[4].Type.DerivesFromOrEqual<TParam5>()); Assert.That(args[5].Type.DerivesFromOrEqual<TParam6>()); Assert.That(args[6].Type.DerivesFromOrEqual<TParam7>()); Assert.That(args[7].Type.DerivesFromOrEqual<TParam8>()); Assert.That(args[8].Type.DerivesFromOrEqual<TParam9>()); Assert.That(args[9].Type.DerivesFromOrEqual<TParam10>()); var subContainer = CreateEmptySubContainer(); _installMethod( subContainer, (TParam1)args[0].Value, (TParam2)args[1].Value, (TParam3)args[2].Value, (TParam4)args[3].Value, (TParam5)args[4].Value, (TParam6)args[5].Value, (TParam7)args[6].Value, (TParam8)args[7].Value, (TParam9)args[8].Value, (TParam10)args[9].Value); injectAction = () => { subContainer.ResolveRoots(); }; return subContainer; } } }