forked from scriptcs/scriptcs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScriptServicesBuilder.cs
More file actions
91 lines (77 loc) · 3.26 KB
/
ScriptServicesBuilder.cs
File metadata and controls
91 lines (77 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common.Logging;
using ScriptCs.Contracts;
using ScriptCs.Engine.Roslyn;
using ScriptCs.Hosting;
using log4net.Core;
using LogLevel = ScriptCs.Contracts.LogLevel;
namespace ScriptCs
{
public class ScriptServicesBuilder : ServiceOverrides<IScriptServicesBuilder>, IScriptServicesBuilder
{
private readonly IInitializationServices _initializationServices;
private IRuntimeServices _runtimeServices;
private readonly IConsole _console;
private bool _repl = false;
private bool _cache = false;
private string _scriptName;
private LogLevel _logLevel;
private Type _scriptExecutorType;
private Type _scriptEngineType;
private ILog _logger;
public ScriptServicesBuilder(IConsole console, ILog logger, IRuntimeServices runtimeServices = null)
{
_initializationServices = new InitializationServices(logger);
_runtimeServices = runtimeServices;
_console = console;
_logger = logger;
}
public ScriptServices Build()
{
var defaultExecutorType = typeof(ScriptExecutor);
Type defaultEngineType = _cache ? typeof(RoslynScriptPersistentEngine) : typeof(RoslynScriptInMemoryEngine);
defaultEngineType = _repl ? typeof(RoslynScriptEngine) : defaultEngineType;
_scriptExecutorType = Overrides.ContainsKey(typeof(IScriptExecutor)) ? (Type)Overrides[typeof(IScriptExecutor)] : defaultExecutorType;
_scriptEngineType = Overrides.ContainsKey(typeof(IScriptEngine)) ? (Type)Overrides[typeof(IScriptEngine)] : defaultEngineType;
var initDirectoryCatalog = _scriptName != null || _repl;
if (_runtimeServices == null)
{
_runtimeServices = new RuntimeServices(_logger, Overrides, LineProcessors, _console,
_scriptEngineType, _scriptExecutorType,
initDirectoryCatalog,
_initializationServices, _scriptName);
}
return _runtimeServices.GetScriptServices();
}
public IScriptServicesBuilder LoadModules(string extension, params string[] moduleNames)
{
var config = new ModuleConfiguration(_cache, _scriptName, _repl, _logLevel, Overrides);
var loader = _initializationServices.GetModuleLoader();
loader.Load(config, _initializationServices.GetFileSystem().ModulesFolder, extension, moduleNames);
return this;
}
public IScriptServicesBuilder Cache(bool cache = true)
{
_cache = cache;
return this;
}
public IScriptServicesBuilder ScriptName(string name)
{
_scriptName = name;
return this;
}
public IScriptServicesBuilder Repl(bool repl = true)
{
_repl = repl;
return this;
}
public IScriptServicesBuilder LogLevel(LogLevel level)
{
_logLevel = level;
return this;
}
}
}