/// <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); }
/// <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; RegisterLicenseKey(AppSettings.GetNullableString("servicestack:license")); if (ServiceController == null) { ServiceController = CreateServiceController(ServiceAssemblies.ToArray()); } Config = HostConfig.ResetInstance(); OnConfigLoad(); AbstractVirtualFileBase.ScanSkipPaths = Config.ScanSkipPaths; ResourceVirtualDirectory.EmbeddedResourceTreatAsFiles = Config.EmbeddedResourceTreatAsFiles; OnBeforeInit(); ServiceController.Init(); BeforeConfigure.Each(fn => fn(this)); Configure(Container); AfterConfigure.Each(fn => fn(this)); if (Config.StrictMode == null && Config.DebugMode) { Config.StrictMode = true; } if (!Config.DebugMode) { Plugins.RemoveAll(x => x is RequestInfoFeature); } 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(); PopulateArrayFilters(); LogInitComplete(); HttpHandlerFactory.Init(); return(this); }
/// <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; //RegisterLicenseKey(AppSettings.GetNullableString("servicestack:license")); var scanAssemblies = new List <Assembly>(ServiceAssemblies); scanAssemblies.AddIfNotExists(GetType().Assembly); //var scanTypes = scanAssemblies.SelectMany(x => x.GetTypes()) // .Where(x => (x.HasInterface(typeof(IPreConfigureAppHost)) // || x.HasInterface(typeof(IConfigureAppHost)) // || x.HasInterface(typeof(IAfterInitAppHost)))) // .ToArray(); //var startupConfigs = scanTypes.Where(x => !x.HasInterface(typeof(IPlugin))) // .Select(x => x.CreateInstance()).WithPriority(); //var configInstances = startupConfigs.PriorityOrdered(); //var preStartupConfigs = startupConfigs.PriorityBelowZero(); //var postStartupConfigs = startupConfigs.PriorityZeroOrAbove(); //void RunPreConfigure(object instance) //{ // try // { // if (instance is IPreConfigureAppHost preConfigureAppHost) // preConfigureAppHost.PreConfigure(this); // } // catch (Exception ex) // { // OnStartupException(ex); // } //} //var priorityPlugins = Plugins.WithPriority().PriorityOrdered().Map(x => (IPlugin)x); //priorityPlugins.ForEach(RunPreConfigure); //configInstances.ForEach(RunPreConfigure); if (ServiceController == null) { ServiceController = CreateServiceController(ServiceAssemblies.ToArray()); } Config = HostConfig.ResetInstance(); OnConfigLoad(); //AbstractVirtualFileBase.ScanSkipPaths = Config.ScanSkipPaths; //ResourceVirtualDirectory.EmbeddedResourceTreatAsFiles = Config.EmbeddedResourceTreatAsFiles; OnBeforeInit(); ServiceController.Init(); //void RunConfigure(object instance) //{ // try // { // //if (instance is IConfigureAppHost configureAppHost) // //configureAppHost.Configure(this); // } // catch (Exception ex) // { // OnStartupException(ex); // } //} //preStartupConfigs.ForEach(RunConfigure); //BeforeConfigure.Each(fn => fn(this)); Configure(Container); //AfterConfigure.Each(fn => fn(this)); //postStartupConfigs.ForEach(RunConfigure); if (Config.StrictMode == null && Config.DebugMode) { Config.StrictMode = true; } //if (!Config.DebugMode) // Plugins.RemoveAll(x => x is RequestInfoFeature); //Some plugins need to initialize before other plugins are registered. Plugins.ToList().ForEach(RunPreInitPlugin); //configInstances.ForEach(RunPreInitPlugin); 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(); //configInstances.ForEach(RunPostInitPlugin); PopulateArrayFilters(); LogInitComplete(); HttpHandlerFactory.Init(); foreach (var callback in AfterInitCallbacks) { callback(this); } Plugins.ForEach(RunAfterInitAppHost); //configInstances.ForEach(RunAfterInitAppHost); ReadyAt = DateTime.UtcNow; return(this); }
//After configure called public virtual void InitFinal() { if (Config.EnableFeatures != Feature.All) { if ((Feature.Xml & Config.EnableFeatures) != Feature.Xml) { Config.IgnoreFormatsInMetadata.Add("xml"); Config.PreferredContentTypes.Remove(MimeTypes.Xml); } if ((Feature.Json & Config.EnableFeatures) != Feature.Json) { Config.IgnoreFormatsInMetadata.Add("json"); Config.PreferredContentTypes.Remove(MimeTypes.Json); } if ((Feature.Jsv & Config.EnableFeatures) != Feature.Jsv) { Config.IgnoreFormatsInMetadata.Add("jsv"); Config.PreferredContentTypes.Remove(MimeTypes.Jsv); } if ((Feature.Csv & Config.EnableFeatures) != Feature.Csv) { Config.IgnoreFormatsInMetadata.Add("csv"); Config.PreferredContentTypes.Remove(MimeTypes.Csv); } if ((Feature.Html & Config.EnableFeatures) != Feature.Html) { Config.IgnoreFormatsInMetadata.Add("html"); Config.PreferredContentTypes.Remove(MimeTypes.Html); } if ((Feature.Soap11 & Config.EnableFeatures) != Feature.Soap11) { Config.IgnoreFormatsInMetadata.Add("soap11"); } if ((Feature.Soap12 & Config.EnableFeatures) != Feature.Soap12) { Config.IgnoreFormatsInMetadata.Add("soap12"); } } if ((Feature.Html & Config.EnableFeatures) != Feature.Html) { Plugins.RemoveAll(x => x is HtmlFormat); } if ((Feature.Csv & Config.EnableFeatures) != Feature.Csv) { Plugins.RemoveAll(x => x is CsvFormat); } if ((Feature.PredefinedRoutes & Config.EnableFeatures) != Feature.PredefinedRoutes) { Plugins.RemoveAll(x => x is PredefinedRoutesFeature); } if ((Feature.Metadata & Config.EnableFeatures) != Feature.Metadata) { Plugins.RemoveAll(x => x is MetadataFeature); Plugins.RemoveAll(x => x is NativeTypesFeature); } if ((Feature.RequestInfo & Config.EnableFeatures) != Feature.RequestInfo) { Plugins.RemoveAll(x => x is RequestInfoFeature); } if ((Feature.Razor & Config.EnableFeatures) != Feature.Razor) { Plugins.RemoveAll(x => x is IRazorPlugin); //external } if ((Feature.ProtoBuf & Config.EnableFeatures) != Feature.ProtoBuf) { Plugins.RemoveAll(x => x is IProtoBufPlugin); //external } if ((Feature.MsgPack & Config.EnableFeatures) != Feature.MsgPack) { Plugins.RemoveAll(x => x is IMsgPackPlugin); //external } var plugins = Plugins.ToArray(); delayLoadPlugin = true; LoadPluginsInternal(plugins); AfterPluginsLoaded(); Metadata.Config.IgnoreFormats = Config.IgnoreFormatsInMetadata; if (!TestMode && Container.Exists <IAuthSession>()) { throw new Exception(ErrorMessages.ShouldNotRegisterAuthSession); } if (!Container.Exists <ICacheClient>()) { if (Container.Exists <IRedisClientsManager>()) { Container.Register(c => c.Resolve <IRedisClientsManager>().GetCacheClient()); } else { Container.Register <ICacheClient>(new MemoryCacheClient()); } } if (!Container.Exists <MemoryCacheClient>()) { Container.Register(new MemoryCacheClient()); } if (Container.Exists <IMessageService>() && !Container.Exists <IMessageFactory>()) { Container.Register(c => c.Resolve <IMessageService>().MessageFactory); } if (Container.Exists <IUserAuthRepository>() && !Container.Exists <IAuthRepository>()) { Container.Register <IAuthRepository>(c => c.Resolve <IUserAuthRepository>()); } if (Config.UseJsObject) { JS.Configure(); } if (Config.LogUnobservedTaskExceptions) { TaskScheduler.UnobservedTaskException += (sender, args) => { args.SetObserved(); args.Exception.Handle(ex => { lock (AsyncErrors) { AsyncErrors.Add(DtoUtils.CreateErrorResponse(null, ex).GetResponseStatus()); return(true); } }); }; } foreach (var callback in AfterInitCallbacks) { callback(this); } ////Register any routes configured on Routes //foreach (var restPath in Routes) //{ // ServiceController.RegisterRestPath(restPath); // //Auto add Route Attributes so they're available in T.ToUrl() extension methods // restPath.RequestType // .AddAttributes(new RouteAttribute(restPath.Path, restPath.AllowedVerbs) // { // Priority = restPath.Priority, // Summary = restPath.Summary, // Notes = restPath.Notes, // }); //} HttpHandlerFactory.Init(); }