using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using Umbraco.Web.Models;
namespace Umbraco.Web
{
///
/// Allows for adding filters for tours during startup
///
public class TourFilterResolver : ManyObjectsResolverBase
{
public TourFilterResolver(IServiceProvider serviceProvider, ILogger logger) : base(serviceProvider, logger)
{
}
private readonly HashSet _instances = new HashSet();
public IEnumerable Filters
{
get { return Values; }
}
///
/// Adds a filter instance
///
///
public void AddFilter(BackOfficeTourFilter filter)
{
using (Resolution.Configuration)
_instances.Add(filter);
}
///
/// Removes a filter instance
///
///
public void RemoveFilter(BackOfficeTourFilter filter)
{
using (Resolution.Configuration)
_instances.Remove(filter);
}
///
/// Removes a filter instance based on callback
///
///
public void RemoveFilterWhere(Func filter)
{
using (Resolution.Configuration)
_instances.RemoveWhere(new Predicate(filter));
}
///
///
/// Overridden to return the combined created instances based on the resolved Types and the Concrete values added with AddFilter
///
///
protected override IEnumerable CreateInstances()
{
var createdInstances = base.CreateInstances();
return createdInstances.Concat(_instances);
}
public override void Clear()
{
base.Clear();
_instances.Clear();
}
internal override void ResetCollections()
{
base.ResetCollections();
_instances.Clear();
}
}
}