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
143 lines (118 loc) · 4.46 KB
/
ScriptServicesBuilder.cs
File metadata and controls
143 lines (118 loc) · 4.46 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Linq;
using System.Collections.Generic;
using ScriptCs.Contracts;
namespace ScriptCs.Hosting
{
public class ScriptServicesBuilder : ServiceOverrides<IScriptServicesBuilder>, IScriptServicesBuilder
{
private readonly ILogProvider _logProvider;
private IRuntimeServices _runtimeServices;
private bool _repl;
private bool _cache;
private bool _debug;
private string _scriptName;
private LogLevel _logLevel;
private Type _scriptExecutorType;
private Type _replType;
private Type _scriptEngineType;
private bool? _loadScriptPacks;
public ScriptServicesBuilder(
IConsole console,
ILogProvider logProvider,
IRuntimeServices runtimeServices = null,
IInitializationServices initializationServices = null)
{
InitializationServices = initializationServices ?? new InitializationServices(logProvider);
_runtimeServices = runtimeServices;
ConsoleInstance = console;
_logProvider = logProvider;
}
public ScriptServices Build()
{
var defaultExecutorType = typeof(ScriptExecutor);
_scriptExecutorType = Overrides.ContainsKey(typeof(IScriptExecutor))
? (Type)Overrides[typeof(IScriptExecutor)]
: defaultExecutorType;
var defaultReplType = typeof(Repl);
_replType = Overrides.ContainsKey(typeof(IRepl)) ? (Type)Overrides[typeof(IRepl)] : defaultReplType;
_scriptEngineType = (Type)Overrides[typeof(IScriptEngine)];
bool initDirectoryCatalog;
if (_loadScriptPacks.HasValue)
{
initDirectoryCatalog = _loadScriptPacks.Value;
}
else
{
initDirectoryCatalog = _scriptName != null || _repl;
}
if (_runtimeServices == null)
{
_runtimeServices = new RuntimeServices(
_logProvider,
Overrides,
ConsoleInstance,
_scriptEngineType,
_scriptExecutorType,
_replType,
initDirectoryCatalog,
InitializationServices,
_scriptName);
}
return _runtimeServices.GetScriptServices();
}
public IScriptServicesBuilder LoadModules(string extension, params string[] moduleNames)
{
moduleNames = moduleNames.Union(new[] { "roslyn" }).ToArray();
var config = new ModuleConfiguration(_cache, _scriptName, _repl, _logLevel, _debug, Overrides);
var loader = InitializationServices.GetModuleLoader();
var fs = InitializationServices.GetFileSystem();
var folders = new[] { fs.GlobalFolder };
loader.Load(config, folders, InitializationServices.GetFileSystem().HostBin, extension, moduleNames);
return this;
}
public IScriptServicesBuilder LoadScriptPacks(bool load = true)
{
_loadScriptPacks = load;
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;
}
public IScriptServicesBuilder Debug(bool debug = true)
{
_debug = debug;
return this;
}
public IScriptServicesBuilder SetOverride<TContract, TImpl>(TImpl value) where TImpl : TContract
{
Overrides[typeof(TContract)] = value;
return this;
}
public IScriptServicesBuilder SetOverride<TContract, TImpl>() where TImpl : TContract
{
Overrides[typeof(TContract)] = typeof(TImpl);
return this;
}
public IInitializationServices InitializationServices { get; private set; }
public IConsole ConsoleInstance { get; private set; }
internal IRuntimeServices RuntimeServices => _runtimeServices;
}
}