/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/ScriptEngine/Hosting/EngineBuilderExtensions.cs
106 строк
4 KB
Ivan Karlo
feat(binary): добавление поддержки конфигурации лимита памяти для двоичных данных
18 май 2026, 15:35
18 май 2026, 15:35
ae3651f
Код
Авторство
О чём код?
/*---------------------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System; using System.Diagnostics.CodeAnalysis; using OneScript.Compilation; using OneScript.Contexts; using OneScript.DependencyInjection; using OneScript.Exceptions; using OneScript.Execution; using OneScript.Language; using OneScript.Language.SyntaxAnalysis; using OneScript.Types; using ScriptEngine.Machine; using ScriptEngine.Machine.Debugger; using ScriptEngine.Machine.Interfaces; namespace ScriptEngine.Hosting { public static class EngineBuilderExtensions { /// <summary> /// Используется для замены DI системы, например в ASP.NET /// </summary> /// <param name="b"></param> /// <param name="ioc"></param> /// <returns></returns> public static IEngineBuilder WithServices(this IEngineBuilder b, IServiceDefinitions ioc) { b.Services = ioc; return b; } public static IEngineBuilder SetupEnvironment(this IEngineBuilder b, Action<ExecutionContext> action) { b.EnvironmentProviders.Add(action); return b; } [SuppressMessage("ReSharper", "RedundantTypeArgumentsOfMethod")] public static IEngineBuilder SetDefaultOptions(this IEngineBuilder builder) { var services = builder.Services; services.Register<IServiceContainer>(sp => sp); services.RegisterSingleton<ITypeManager, DefaultTypeManager>(); services.RegisterSingleton<IGlobalsManager, GlobalInstancesManager>(); services.RegisterSingleton<RuntimeEnvironment>(); services.RegisterSingleton<IRuntimeEnvironment>(sp => sp.Resolve<RuntimeEnvironment>()); services.RegisterSingleton<TypeSymbolsProviderFactory>(); services.RegisterSingleton<IErrorSink>(svc => new ThrowingErrorSink(CompilerException.FromCodeError)); services.RegisterSingleton<IExceptionInfoFactory, ExceptionInfoFactory>(); services.RegisterSingleton<IBslProcessFactory, BslProcessFactory>(); services.RegisterSingleton<IDebugger, DisabledDebugger>(); services.RegisterScoped<StackMachineProvider>(); services.Register<IDependencyResolver, NullDependencyResolver>(); services.RegisterEnumerable<IExecutorProvider, StackMachineExecutor>(); services.RegisterEnumerable<IDirectiveHandler, ConditionalDirectiveHandler>(); services.RegisterEnumerable<IDirectiveHandler, RegionDirectiveHandler>(); services.Register<ExecutionContext>(); services.EnablePredefinedIterables(); services.Register<PreprocessorHandlers>(sp => { var providers = sp.ResolveEnumerable<IDirectiveHandler>(); return new PreprocessorHandlers(providers); }); services.RegisterSingleton<EngineConfiguration>(); services.Register<KeyValueConfig>(sp => { var holder = sp.Resolve<EngineConfiguration>(); return holder.GetConfig(); }); services.Register<ScriptingEngine>(); return builder; } public static IEngineBuilder UseImports(this IEngineBuilder b) { b.Services.UseImports(); return b; } public static IEngineBuilder WithDebugger(this IEngineBuilder b, IDebugger debugger) { b.Services.RegisterSingleton(debugger); return b; } public static IEngineBuilder SetupServices(this IEngineBuilder b, Action<IServiceDefinitions> setup) { setup(b.Services); return b; } } }