using System;
using System.Collections.Generic;
using System.Reflection;
using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
namespace Umbraco.Core
{
///
/// A resolver to return all IAction objects
///
internal sealed class ActionsResolver : ManyObjectsResolverBase
{
///
/// Constructor
///
///
internal ActionsResolver(IEnumerable packageActions)
: base(packageActions)
{
}
///
/// Gets the implementations.
///
public IEnumerable Actions
{
get
{
return Values;
}
}
protected override IEnumerable CreateInstances()
{
var actions = new List();
var foundIActions = PluginManager.Current.ResolveActions();
foreach (var type in foundIActions)
{
IAction typeInstance;
var instance = type.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static);
//if the singletone initializer is not found, try simply creating an instance of the IAction if it supports public constructors
if (instance == null)
typeInstance = PluginManager.Current.CreateInstance(type);
else
typeInstance = instance.GetValue(null, null) as IAction;
if (typeInstance != null)
{
actions.Add(typeInstance);
}
}
return actions;
}
}
}