#region License
// /*
// See license included in this library folder.
// */
#endregion
#region Using Directives
using System;
using System.Collections.Generic;
using System.Linq;
using Transformalize.Libs.Ninject.Components;
using Transformalize.Libs.Ninject.Infrastructure;
using Transformalize.Libs.Ninject.Infrastructure.Language;
#endregion
namespace Transformalize.Libs.Ninject.Planning.Bindings.Resolvers
{
/// <summary>
/// Resolves bindings for open generic types.
/// </summary>
public class OpenGenericBindingResolver : NinjectComponent, IBindingResolver
{
/// <summary>
/// Returns any bindings from the specified collection that match the specified service.
/// </summary>
/// <param name="bindings">The multimap of all registered bindings.</param>
/// <param name="service">The service in question.</param>
/// <returns>The series of matching bindings.</returns>
public IEnumerable<IBinding> Resolve(Multimap<Type, IBinding> bindings, Type service)
{
if (!service.IsGenericType || service.IsGenericTypeDefinition || !bindings.ContainsKey(service.GetGenericTypeDefinition()))
return Enumerable.Empty<IBinding>();
return bindings[service.GetGenericTypeDefinition()].ToEnumerable();
}
}
}