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; } } }