using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Funq; using ServiceStack.Html; using ServiceStack.IO; using ServiceStack.Server; using ServiceStack.VirtualPath; using ServiceStack.ServiceHost; using ServiceStack.WebHost.Endpoints; namespace ServiceStack.ServiceInterface.Testing { public class BasicAppHost : IAppHost, IHasContainer, IDisposable { public BasicAppHost() { this.Container = new Container(); this.PreRequestFilters = new List>(); this.RequestFilters = new List>(); this.ResponseFilters = new List>(); this.ViewEngines = new List(); this.CatchAllHandlers = new List(); VirtualPathProvider = new FileSystemVirtualPathProvider(this, "~".MapServerPath()); } public void RegisterAs() where T : TAs { this.Container.RegisterAs(); } public virtual void Release(object instance) { } public void OnEndRequest() {} public IServiceRoutes Routes { get; private set; } public void Register(T instance) { this.Container.Register(instance); } public T TryResolve() { return this.Container.TryResolve(); } public Container Container { get; set; } public IContentTypes ContentTypeses { get; set; } public List> PreRequestFilters { get; set; } public List> RequestFilters { get; set; } public List> ResponseFilters { get; set; } public List ViewEngines { get; set; } public HandleUncaughtExceptionDelegate ExceptionHandler { get; set; } public HandleServiceExceptionDelegate ServiceExceptionHandler { get; set; } public List CatchAllHandlers { get; set; } public Dictionary> RequestBinders { get { throw new NotImplementedException(); } } private EndpointHostConfig config; public EndpointHostConfig Config { get { return config ?? (new EndpointHostConfig("BasicAppHost", new ServiceManager(Container, Assembly.GetExecutingAssembly()))); } set { config = value; } } public void RegisterService(Type serviceType, params string[] atRestPaths) { Config.ServiceManager.RegisterService(serviceType); } public List Plugins { get; private set; } public void LoadPlugin(params IPlugin[] plugins) { plugins.ToList().ForEach(x => x.Register(this)); } public IVirtualPathProvider VirtualPathProvider { get; set; } public IServiceRunner CreateServiceRunner(ActionContext actionContext) { throw new NotImplementedException(); } public virtual string ResolveAbsoluteUrl(string virtualPath, IHttpRequest httpReq) { return httpReq.GetAbsoluteUrl(virtualPath); } public BasicAppHost Init() { EndpointHost.ConfigureHost(this, GetType().Name, Config.ServiceManager); return this; } private bool disposed; protected virtual void Dispose(bool disposing) { if (disposed) return; lock (this) { if (disposed) return; if (disposing) { if (EndpointHost.Config != null && EndpointHost.Config.ServiceManager != null) { EndpointHost.Config.ServiceManager.Dispose(); } EndpointHost.Dispose(); } //release unmanaged resources here... disposed = true; } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } }