/
smwwiki
/
OneScript_fork
Обзор
Документация
Войти
/
smwwiki
/
OneScript_fork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/ScriptEngine/Hosting/EngineBuilderExtensions.cs
102 строки
4 KB
EvilBeaver
Перенесены полезные коммиты из неудачной ветки modules-init-1000
04 ноя 2024, 21:13
04 ноя 2024, 21:13
6813593
Код
Авторство
О чём код?
/*---------------------------------------------------------- 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.Contexts; 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.Register<ExecutionDispatcher>(); 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.Register<KeyValueConfig>(sp => { var providers = sp.Resolve<ConfigurationProviders>(); return providers.CreateConfig(); }); services.Register<ScriptingEngine>(); return builder; } public static IEngineBuilder UseImports(this IEngineBuilder b) { b.Services.UseImports(); return b; } public static IEngineBuilder WithDebugger(this IEngineBuilder b, IDebugController debugger) { b.Services.RegisterSingleton(debugger); return b; } public static IEngineBuilder SetupServices(this IEngineBuilder b, Action<IServiceDefinitions> setup) { setup(b.Services); return b; } } }