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
110 lines (90 loc) · 3.81 KB
/
ScriptServicesBuilder.cs
File metadata and controls
110 lines (90 loc) · 3.81 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
using System;
using System.Linq;
using Common.Logging;
using ScriptCs.Contracts;
using LogLevel = ScriptCs.Contracts.LogLevel;
namespace ScriptCs.Hosting
{
public class ScriptServicesBuilder : ServiceOverrides<IScriptServicesBuilder>, IScriptServicesBuilder
{
private IRuntimeServices _runtimeServices;
private readonly ITypeResolver _typeResolver;
private bool _repl;
private bool _cache;
private bool _debug;
private string _scriptName;
private LogLevel _logLevel;
private Type _scriptExecutorType;
private Type _scriptEngineType;
private ILog _logger;
public ScriptServicesBuilder(IConsole console, ILog logger, IRuntimeServices runtimeServices = null, ITypeResolver typeResolver = null, IInitializationServices initializationServices = null)
{
InitializationServices = initializationServices ?? new InitializationServices(logger);
_runtimeServices = runtimeServices;
_typeResolver = typeResolver;
_typeResolver = typeResolver ?? new TypeResolver();
ConsoleInstance = console;
_logger = logger;
}
public ScriptServices Build()
{
Type defaultExecutorType = typeof(ScriptExecutor);
_scriptExecutorType = Overrides.ContainsKey(typeof(IScriptExecutor)) ? (Type)Overrides[typeof(IScriptExecutor)] : defaultExecutorType;
_scriptEngineType = (Type)Overrides[typeof(IScriptEngine)];
var initDirectoryCatalog = _scriptName != null || _repl;
if (_runtimeServices == null)
{
_runtimeServices = new RuntimeServices(_logger, Overrides, ConsoleInstance,
_scriptEngineType, _scriptExecutorType,
initDirectoryCatalog,
InitializationServices, _scriptName);
}
return _runtimeServices.GetScriptServices();
}
private string GetEngineModule(string[] modules)
{
if (_typeResolver.ResolveType("Mono.Runtime") != null || modules.Contains("mono"))
{
return "mono";
}
return "roslyn";
}
public IScriptServicesBuilder LoadModules(string extension, params string[] moduleNames)
{
moduleNames = moduleNames.Union(new[] { GetEngineModule(moduleNames) }).ToArray();
var config = new ModuleConfiguration(_cache, _scriptName, _repl, _logLevel, _debug, Overrides);
var loader = InitializationServices.GetModuleLoader();
var fs = InitializationServices.GetFileSystem();
var folders = new[] { fs.ModulesFolder, fs.CurrentDirectory };
loader.Load(config, folders, InitializationServices.GetFileSystem().HostBin, 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;
}
public IScriptServicesBuilder Debug(bool debug = true)
{
_debug = debug;
return this;
}
public IInitializationServices InitializationServices { get; private set; }
public IConsole ConsoleInstance { get; private set; }
}
}