Created
June 15, 2012 12:47
-
-
Save mckn/2936315 to your computer and use it in GitHub Desktop.
ASP.NET WebApi RC - Castle Windsor Integration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web.Http.Dependencies; | |
using Castle.Windsor; | |
namespace Castle.Windsor.AspNet.WebApi | |
{ | |
public class WindsorDependencyResolver : IDependencyResolver | |
{ | |
private readonly IWindsorContainer _container; | |
public WindsorDependencyResolver(IWindsorContainer container) | |
{ | |
_container = container; | |
} | |
public void Dispose() | |
{ | |
_container.Dispose(); | |
} | |
public object GetService(Type serviceType) | |
{ | |
if (_container.HasComponent(serviceType)) | |
{ | |
return _container.Resolve(serviceType); | |
} | |
return null; | |
} | |
public IEnumerable<object> GetServices(Type serviceType) | |
{ | |
if (_container.HasComponent(serviceType)) | |
{ | |
return _container.ResolveAll(serviceType) as IEnumerable<object>; | |
} | |
return Enumerable.Empty<object>(); | |
} | |
public IDependencyScope BeginScope() | |
{ | |
var scopedResolver = new WindsorDependencyResolver(_container.CreateLifetimeScope()); | |
return new WindsorDependencyScope(scopedResolver); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Web.Http.Dependencies; | |
namespace Castle.Windsor.AspNet.WebApi | |
{ | |
public class WindsorDependencyScope : IDependencyScope | |
{ | |
private readonly IDependencyResolver _resolver; | |
public WindsorDependencyScope(IDependencyResolver resolver) | |
{ | |
_resolver = resolver; | |
} | |
public void Dispose() | |
{ | |
_resolver.Dispose(); | |
} | |
public object GetService(Type serviceType) | |
{ | |
return _resolver.GetService(serviceType); | |
} | |
public IEnumerable<object> GetServices(Type serviceType) | |
{ | |
return _resolver.GetServices(serviceType); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Castle.Windsor; | |
namespace Castle.Windsor.AspNet.WebApi | |
{ | |
public static class WindsorExtensions | |
{ | |
public static IWindsorContainer CreateLifetimeScope(this IWindsorContainer parent) | |
{ | |
var child = new WindsorContainer(); | |
parent.AddChildContainer(child); | |
return child; | |
} | |
public static bool HasComponent(this IWindsorContainer container, Type serviceType) | |
{ | |
return container.Kernel.HasComponent(serviceType); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment