forked from scriptcs/scriptcs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCompositionRoot.cs
More file actions
94 lines (81 loc) · 3.01 KB
/
CompositionRoot.cs
File metadata and controls
94 lines (81 loc) · 3.01 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
using System;
using System.ComponentModel.Composition.Hosting;
using System.IO;
using Autofac;
using Autofac.Integration.Mef;
using Common.Logging;
using ScriptCs.Engine.Roslyn;
using ScriptCs.Package;
using ScriptCs.Package.InstallationProvider;
namespace ScriptCs
{
public class CompositionRoot
{
private readonly bool _debug;
private readonly LogLevel _logLevel;
private readonly bool _shouldInitDrirectoryCatalog;
private IContainer _container;
private ScriptServiceRoot _scriptServiceRoot;
public CompositionRoot(ScriptCsArgs args)
{
_debug = args.Debug;
_logLevel = args.LogLevel;
_shouldInitDrirectoryCatalog = ShouldInitDrirectoryCatalog(args);
}
public void Initialize()
{
var builder = new ContainerBuilder();
var loggerConfigurator = new LoggerConfigurator(_logLevel);
loggerConfigurator.Configure();
var logger = loggerConfigurator.GetLogger();
builder.RegisterInstance<ILog>(logger);
var types = new[]
{
typeof (ScriptHostFactory),
typeof (FileSystem),
typeof (PackageAssemblyResolver),
typeof (PackageContainer),
typeof (FilePreProcessor),
typeof (ScriptPackResolver),
typeof (NugetInstallationProvider),
typeof (PackageInstaller),
typeof (ReplConsole)
};
builder.RegisterTypes(types).AsImplementedInterfaces();
if (_debug)
{
builder.RegisterType<DebugScriptExecutor>().As<IScriptExecutor>();
builder.RegisterType<RoslynScriptDebuggerEngine>().As<IScriptEngine>();
}
else
{
builder.RegisterType<ScriptExecutor>().As<IScriptExecutor>();
builder.RegisterType<RoslynScriptEngine>().As<IScriptEngine>();
}
builder.RegisterType<ScriptServiceRoot>().As<ScriptServiceRoot>();
if (_shouldInitDrirectoryCatalog)
{
var scriptPath = Path.Combine(Environment.CurrentDirectory, "bin");
if (Directory.Exists(scriptPath))
{
var catalog = new DirectoryCatalog(scriptPath);
builder.RegisterComposablePartCatalog(catalog);
}
}
_container = builder.Build();
_scriptServiceRoot = _container.Resolve<ScriptServiceRoot>();
}
public ScriptServiceRoot GetServiceRoot()
{
return _scriptServiceRoot;
}
public ILog GetLogger()
{
return _container.Resolve<ILog>();
}
private static bool ShouldInitDrirectoryCatalog(ScriptCsArgs args)
{
return args.Repl || !string.IsNullOrWhiteSpace(args.ScriptName);
}
}
}