ArrayResolver
Handle dependencies of services in the format of typed arrays.
using Castle.Core;
using Castle.MicroKernel.Context;
using System;
namespace Castle.MicroKernel.Resolvers.SpecializedResolvers
{
public class ArrayResolver : ISubDependencyResolver
{
private readonly bool allowEmptyArray;
private readonly IKernel kernel;
public ArrayResolver(IKernel kernel)
: this(kernel, false)
{
}
public ArrayResolver(IKernel kernel, bool allowEmptyArray)
{
this.kernel = kernel;
this.allowEmptyArray = allowEmptyArray;
}
public bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
Type targetItemType = dependency.TargetItemType;
if (targetItemType != (Type)null && targetItemType.IsArray) {
if (!allowEmptyArray)
return kernel.HasComponent(targetItemType.GetElementType());
return true;
}
return false;
}
public object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
return kernel.ResolveAll(dependency.TargetItemType.GetElementType(), null);
}
}
}