Skip to content

Instantly share code, notes, and snippets.

@mckn
Created June 15, 2012 12:47
Show Gist options
  • Save mckn/2936315 to your computer and use it in GitHub Desktop.
Save mckn/2936315 to your computer and use it in GitHub Desktop.
ASP.NET WebApi RC - Castle Windsor Integration
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);
}
}
}
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);
}
}
}
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