/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
v2.0.3-alpha
src/ScriptEngine/Hosting/EngineBuilderExtensions.cs
97 строк
4 KB
EvilBeaver
rename
30 ноя 2021, 07:40
30 ноя 2021, 07:40
29ffa37
Код
Авторство
О чём код?
/*---------------------------------------------------------- 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 OneScript.DependencyInjection; using OneScript.Execution; using OneScript.Language.SyntaxAnalysis; using OneScript.Types; using ScriptEngine.Compiler; using ScriptEngine.Machine; 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<MachineEnvironment> action) { b.EnvironmentProviders.Add(action); return b; } 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<ICompilerServiceFactory, CompilerServiceFactory>(); services.RegisterSingleton<IErrorSink, ThrowingErrorSink>(); services.Register<ExecutionDispatcher>(); services.RegisterEnumerable<IExecutorProvider, StackMachineExecutor>(); services.RegisterEnumerable<IDirectiveHandler, ConditionalDirectiveHandler>(); services.RegisterEnumerable<IDirectiveHandler, RegionDirectiveHandler>(); services.Register<MachineEnvironment>(); 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<CompilerOptions>(sp => { var opts = new CompilerOptions { DependencyResolver = sp.TryResolve<IDependencyResolver>(), ErrorSink = sp.Resolve<IErrorSink>(), PreprocessorHandlers = sp.Resolve<PreprocessorHandlers>() }; return opts; }); 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; } } }