/// <summary>
/// Initializes the AppHost.
/// Calls the <see cref="Configure"/> method.
/// Should be called before start.
/// </summary>
public virtual ServiceStackHost Init()
{
if (Instance != null)
{
throw new InvalidDataException($"ServiceStackHost.Instance has already been set ({Instance.GetType().Name})");
}
Service.GlobalResolver = Instance = this;
Config = HostConfig.ResetInstance();
OnConfigLoad();
AbstractVirtualFileBase.ScanSkipPaths = Config.ScanSkipPaths;
ResourceVirtualDirectory.EmbeddedResourceTreatAsFiles = Config.EmbeddedResourceTreatAsFiles;
Config.DebugMode = GetType().GetAssembly().IsDebugBuild();
if (Config.DebugMode)
{
Plugins.Add(new RequestInfoFeature());
}
OnBeforeInit();
ServiceController.Init();
Configure(Container);
if (Config.StrictMode == null && Config.DebugMode)
{
Config.StrictMode = true;
}
ConfigurePlugins();
List <IVirtualPathProvider> pathProviders = null;
if (VirtualFileSources == null)
{
pathProviders = GetVirtualFileSources().Where(x => x != null).ToList();
VirtualFileSources = pathProviders.Count > 1
? new MultiVirtualFiles(pathProviders.ToArray())
: pathProviders.First();
}
if (VirtualFiles == null)
{
VirtualFiles = pathProviders?.FirstOrDefault(x => x is FileSystemVirtualFiles) as IVirtualFiles
?? GetVirtualFileSources().FirstOrDefault(x => x is FileSystemVirtualFiles) as IVirtualFiles;
}
OnAfterInit();
LogInitComplete();
HttpHandlerFactory.Init();
return(this);
}