namespace System.Web.Mvc { using System; using System.Collections.Generic; using System.Linq; internal class MultiServiceResolver : IResolver> where TService : class { private IEnumerable _itemsFromService; private Func> _itemsThunk; private Func _resolverThunk; public MultiServiceResolver(Func> itemsThunk) { if (itemsThunk == null) { throw new ArgumentNullException("itemsThunk"); } _itemsThunk = itemsThunk; _resolverThunk = () => DependencyResolver.Current; } internal MultiServiceResolver(Func> itemsThunk, IDependencyResolver resolver) : this(itemsThunk) { if (resolver != null) { _resolverThunk = () => resolver; } } public IEnumerable Current { get { if (_itemsFromService == null) { lock (_itemsThunk) { if (_itemsFromService == null) { _itemsFromService = _resolverThunk().GetServices(); } } } return _itemsFromService.Concat(_itemsThunk()); } } } }