using System; using System.Collections.Generic; using System.Linq; using System.Web.Http.Dependencies; using IContainer = StructureMap.IContainer; namespace Sony.ChartBot.Client.DependencyResolution { public class DependencyScope : IDependencyScope { internal readonly IContainer Container; public DependencyScope(IContainer container) { Container = container; } public object GetService(Type serviceType) { return serviceType.IsAbstract || serviceType.IsInterface ? Container.TryGetInstance(serviceType) : Container.GetInstance(serviceType); } public IEnumerable GetServices(Type serviceType) { return Container.GetAllInstances(serviceType).Cast(); } public void Dispose() { if (Container != null) Container.Dispose(); } } public class DependencyResolver : DependencyScope, IDependencyResolver { private readonly IContainer _container; public DependencyResolver(IContainer container) : base(container.GetNestedContainer()) { _container = container; } public IDependencyScope BeginScope() { // Create a Nested Container.So that we can dispose the container once the request is completed. var nestedContainer = _container.GetNestedContainer(); return new DependencyScope(nestedContainer); } } }