#region License Information /* HeuristicLab * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System; using System.Collections.Generic; using System.Reflection; namespace HeuristicLab.PluginInfrastructure { /// /// Interface for application managers. /// public interface IApplicationManager { /// /// Gets all discovered plugins. /// IEnumerable Plugins { get; } /// /// Gets all discovered applications. /// IEnumerable Applications { get; } /// /// Discovers and creates instances of and all types implementing or inheriting (directly and indirectly). /// /// The type or super-type to discover. /// An enumerable of instances of the discovered types. IEnumerable GetInstances() where T : class; /// /// Discovers and creates instances of and all types implementing or inheriting (directly and indirectly). /// /// The type or super-type to discover. /// An enumerable of instances of the discovered types. IEnumerable GetInstances(Type type); /// /// Discovers all types implementing or inheriting (directly and indirectly). /// /// The type to discover. /// Return only types that are instantiable (instance, abstract... are not returned) /// An enumerable of discovered types. IEnumerable GetTypes(Type type, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false); /// /// Discovers all types implementing or inheriting all or any type in (directly and indirectly). /// /// The types to discover. /// Return only types that are instantiable (instance, abstract... are not returned) /// Specifies if discovered types must implement or inherit all given . /// An enumerable of discovered types. IEnumerable GetTypes(IEnumerable types, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false, bool assignableToAllTypes = true); /// /// Discovers all types implementing or inheriting (directly and indirectly) that are declared in any assembly of . /// /// The type to discover. /// The declaring plugin. /// Return only types that are instantiable (instance, abstract... are not returned) /// An enumerable of discovered types. IEnumerable GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false); /// /// Discovers all types implementing or inheriting all or any type in (directly and indirectly) that are declared in any assembly of . /// /// The types to discover. /// The declaring plugin. /// Return only types that are instantiable (instance, abstract... are not returned) /// /// Specifies if discovered types must implement or inherit all given . /// An enumerable of discovered types. IEnumerable GetTypes(IEnumerable types, IPluginDescription plugin, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false, bool assignableToAllTypes = true); /// /// Discovers all types implementing or inheriting (directly and indirectly) that are declared in the. /// /// The type to discover. /// The declaring assembly. /// Return only types that are instantiable (instance, abstract... are not returned) /// An enumerable of discovered types. IEnumerable GetTypes(Type type, Assembly assembly, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false); /// /// Discovers all types implementing or inheriting all or any type in (directly and indirectly) that are declaed in any assembly of . /// /// The types to discover. /// The declaring assembly. /// Return only types that are instantiable (instance, abstract... are not returned) /// /// Specifies if discovered types must implement or inherit all given . /// An enumerable of discovered types. IEnumerable GetTypes(IEnumerable types, Assembly assembly, bool onlyInstantiable = true, bool includeGenericTypeDefinitions = false, bool assignableToAllTypes = true); /// /// Finds the plugin that declares the type. /// /// The type of interest. /// The description of the plugin that declares the given type or null if the type has not been declared by a known plugin. IPluginDescription GetDeclaringPlugin(Type type); } }