// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Linq; namespace System.Web.Mvc { internal class MultiServiceResolver : IResolver> where TService : class { private Lazy> _itemsFromService; private Func> _itemsThunk; private Func _resolverThunk; public MultiServiceResolver(Func> itemsThunk) { if (itemsThunk == null) { throw new ArgumentNullException("itemsThunk"); } _itemsThunk = itemsThunk; _resolverThunk = () => DependencyResolver.Current; _itemsFromService = new Lazy>(() => _resolverThunk().GetServices()); } internal MultiServiceResolver(Func> itemsThunk, IDependencyResolver resolver) : this(itemsThunk) { if (resolver != null) { _resolverThunk = () => resolver; } } public IEnumerable Current { get { return _itemsFromService.Value.Concat(_itemsThunk()); } } } }