Skip to content

Instantly share code, notes, and snippets.

@agross
Created June 22, 2010 11:38
Show Gist options
  • Save agross/448360 to your computer and use it in GitHub Desktop.
Save agross/448360 to your computer and use it in GitHub Desktop.
using Castle.MicroKernel.Facilities;
namespace Crimson.Infrastructure.Container
{
public class ArrayDependencyFacility : AbstractFacility
{
protected override void Init()
{
Kernel.Resolver.AddSubResolver(new ArraySubDependencyResolver(Kernel));
}
}
}
using Castle.Core;
using Castle.MicroKernel;
namespace Crimson.Infrastructure.Container
{
internal class ArraySubDependencyResolver : ISubDependencyResolver
{
readonly IKernel _kernel;
public ArraySubDependencyResolver(IKernel kernel)
{
_kernel = kernel;
}
public object Resolve(CreationContext context,
ISubDependencyResolver parentResolver,
ComponentModel model,
DependencyModel dependency)
{
return _kernel.ResolveAll(dependency.TargetType.GetElementType(), null);
}
public bool CanResolve(CreationContext context,
ISubDependencyResolver parentResolver,
ComponentModel model,
DependencyModel dependency)
{
return dependency.TargetType != null &&
dependency.TargetType.IsArray &&
dependency.TargetType.GetElementType().IsInterface &&
!model.Parameters.Contains(dependency.DependencyKey);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment