ListResolver
Handle dependencies of services in the format of generic IList.
using Castle.Core;
using Castle.Core.Internal;
using Castle.MicroKernel.Context;
using System;
using System.Collections.Generic;
namespace Castle.MicroKernel.Resolvers.SpecializedResolvers
{
public class ListResolver : CollectionResolver
{
public ListResolver(IKernel kernel)
: base(kernel, false)
{
}
public ListResolver(IKernel kernel, bool allowEmptyList)
: base(kernel, allowEmptyList)
{
}
public override object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
object obj = base.Resolve(context, contextHandlerResolver, model, dependency);
Type subtypeofTBase = BuildListType(dependency);
return subtypeofTBase.CreateInstance<object>(new object[1] {
obj
});
}
protected override Type GetItemType(Type targetItemType)
{
if (!targetItemType.IsGenericType || targetItemType.GetGenericTypeDefinition() != typeof(IList<>))
return null;
return targetItemType.GetGenericArguments()[0];
}
private Type BuildListType(DependencyModel dependency)
{
return typeof(List<>).MakeGenericType(GetItemType(dependency.TargetItemType));
}
}
}