Files
linux-packaging-mono/external/aspnetwebstack/src/System.Web.Mvc/MultiServiceResolver.cs
Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

42 lines
1.3 KiB
C#

// 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<TService> : IResolver<IEnumerable<TService>>
where TService : class
{
private Lazy<IEnumerable<TService>> _itemsFromService;
private Func<IEnumerable<TService>> _itemsThunk;
private Func<IDependencyResolver> _resolverThunk;
public MultiServiceResolver(Func<IEnumerable<TService>> itemsThunk)
{
if (itemsThunk == null)
{
throw new ArgumentNullException("itemsThunk");
}
_itemsThunk = itemsThunk;
_resolverThunk = () => DependencyResolver.Current;
_itemsFromService = new Lazy<IEnumerable<TService>>(() => _resolverThunk().GetServices<TService>());
}
internal MultiServiceResolver(Func<IEnumerable<TService>> itemsThunk, IDependencyResolver resolver)
: this(itemsThunk)
{
if (resolver != null)
{
_resolverThunk = () => resolver;
}
}
public IEnumerable<TService> Current
{
get { return _itemsFromService.Value.Concat(_itemsThunk()); }
}
}
}