Skip to content

Instantly share code, notes, and snippets.

@jonorossi
Created March 12, 2016 12:50
Show Gist options
  • Save jonorossi/0ac344d74be2f3bba1b9 to your computer and use it in GitHub Desktop.
Save jonorossi/0ac344d74be2f3bba1b9 to your computer and use it in GitHub Desktop.
Custom Castle Windsor IDependencyResolver allowing access to registered subresolvers
using Castle.MicroKernel;
using Castle.MicroKernel.Proxy;
using Castle.MicroKernel.Resolvers;
using Castle.MicroKernel.Resolvers.SpecializedResolvers;
using Castle.Windsor;
using Castle.Windsor.Installer;
using System;
using System.Collections.Generic;
using System.Linq;
namespace WindsorResolversTest
{
class Program
{
static void Main(string[] args)
{
var dependencyResolver = new MyDependencyResolver();
var kernel = new DefaultKernel(dependencyResolver, new NotSupportedProxyFactory());
var container = new WindsorContainer(kernel, new DefaultComponentInstaller());
container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel, true));
if (!dependencyResolver.GetSubResolvers<ArrayResolver>().Any())
{
container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel, true));
}
}
}
public class MyDependencyResolver : DefaultDependencyResolver, IDependencyResolver
{
private readonly IList<ISubDependencyResolver> subResolvers = new List<ISubDependencyResolver>();
public new void AddSubResolver(ISubDependencyResolver subResolver)
{
subResolvers.Add(subResolver);
base.AddSubResolver(subResolver);
}
public new void RemoveSubResolver(ISubDependencyResolver subResolver)
{
subResolvers.Remove(subResolver);
base.RemoveSubResolver(subResolver);
}
// Examples of ways to access subresolvers
public bool HasSubResolver(ISubDependencyResolver subResolver)
{
// Instance comparison
return subResolvers.Contains(subResolver);
}
public IEnumerable<ISubDependencyResolver> GetSubResolvers<T>() where T : ISubDependencyResolver
{
return subResolvers.Where(x => x.GetType() == typeof(T));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment