public void Initialize()
{
var builder = new ContainerBuilder();
var loggerConfigurator = new LoggerConfigurator(_logLevel);
loggerConfigurator.Configure();
var logger = loggerConfigurator.GetLogger();
builder.RegisterInstance<ILog>(logger).Exported(x => x.As<ILog>());
builder.RegisterType<ReplConsole>().As<IConsole>().Exported(x => x.As<IConsole>());
var types = new[]
{
typeof (ScriptHostFactory),
typeof (FileSystem),
typeof (PackageAssemblyResolver),
typeof (PackageContainer),
typeof (FilePreProcessor),
typeof (ScriptPackResolver),
typeof (NugetInstallationProvider),
typeof (PackageInstaller),
typeof (AssemblyName)
};
builder.RegisterTypes(types).AsImplementedInterfaces();
if (_debug)
{
builder.RegisterType<DebugScriptExecutor>().As<IScriptExecutor>();
builder.RegisterType<RoslynScriptDebuggerEngine>().As<IScriptEngine>();
builder.RegisterType<FSharpScriptEngine>().As<IScriptEngine>();
}
else
{
builder.RegisterType<ScriptExecutor>().As<IScriptExecutor>();
builder.RegisterType<RoslynScriptEngine>().As<IScriptEngine>();
builder.RegisterType<FSharpScriptEngine>().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>();
}