// Copyright (c) Service Stack LLC. All Rights Reserved. // License: https://raw.github.com/ServiceStack/ServiceStack/master/license.txt using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Services; using ServiceStack.Host; namespace ServiceStack { public abstract partial class ServiceStackHost : IDisposable { public static ServiceStackHost Instance { get; protected set; } protected ServiceStackHost(string serviceName) { ServiceName = serviceName; ServiceController = CreateServiceController(); RestPaths = new List(); Metadata = new ServiceMetadata(); GlobalRequestFilters = new List>(); GlobalResponseFilters = new List>(); } public abstract void Configure(); public abstract object CreateInstance(Type type); protected abstract ServiceController CreateServiceController(); public virtual ServiceStackHost Init() { Instance = this; ServiceController.Init(); Configure(); ServiceController.AfterInit(); return this; } public virtual ServiceStackHost Start(string urlBase) { throw new NotImplementedException("Start(listeningAtUrlBase) is not supported by this AppHost"); } public string ServiceName { get; set; } public ServiceMetadata Metadata { get; set; } public ServiceController ServiceController { get; set; } public List RestPaths = new List(); public List> GlobalRequestFilters { get; set; } public List> GlobalResponseFilters { get; set; } public abstract T TryResolve(); public abstract T Resolve(); public virtual MediaBrowser.Model.Services.RouteAttribute[] GetRouteAttributes(Type requestType) { return requestType.AllAttributes(); } public abstract object GetTaskResult(Task task, string requestName); public abstract Func GetParseFn(Type propertyType); public abstract void SerializeToJson(object o, Stream stream); public abstract void SerializeToXml(object o, Stream stream); public abstract object DeserializeXml(Type type, Stream stream); public abstract object DeserializeJson(Type type, Stream stream); public virtual void Dispose() { //JsConfig.Reset(); //Clears Runtime Attributes Instance = null; } protected abstract ILogger Logger { get; } public void OnLogError(Type type, string message) { Logger.Error(message); } public void OnLogError(Type type, string message, Exception ex) { Logger.ErrorException(message, ex); } } }