/// <summary>Initializes a new instance of the <see cref="PluginModel" /> class.</summary> /// <param name="pluginType">The plug-in type.</param> /// <param name="instanceAllowance">The instance allowance.</param> /// <param name="pluginName">Name of the plug-in.</param> /// <param name="controlWrapper">The control wrapper.</param> public PluginModel(Type pluginType, InstanceAllowance instanceAllowance, string pluginName, ControlWrapper controlWrapper) { PluginType = pluginType; PluginInstanceAllowance = instanceAllowance; PluginName = pluginName; PluginControlWrapper = controlWrapper; }
/// <summary>Loads the plug-ins.</summary> /// <returns>A collection of the PluginModel's describing each plug-in.</returns> /// <exception cref="PluginException">An error occurred attempting to retrieve the plug-in assembly names.</exception> /// <exception cref="PluginException">An error occurred attempting to load the plug-in assembly types.</exception> /// <exception cref="PluginException">An error occurred attempting to build a plug-in model for type [type].</exception> public PluginModelCollection LoadPlugins() { IReadOnlyList <PluginLocation> plugins = PluginReader.ReadPluginDirectory(); PluginTypeCollection pluginTypeCollection = PluginReader.LoadPluginAssemblyTypes(plugins); PluginModelCollection pluginModelCollection = new PluginModelCollection(); if (pluginTypeCollection == null || pluginTypeCollection.Count == 0) { return(pluginModelCollection); } foreach (Type type in pluginTypeCollection) { try { PluginInstanceAllowanceAttribute pluginInstanceAllowanceAttribute = type.GetCustomAttribute <PluginInstanceAllowanceAttribute>(); PluginNameAttribute pluginNameAttribute = type.GetCustomAttribute <PluginNameAttribute>(); ControlWrapperAttribute pluginControlWrapperAttribute = type.GetCustomAttribute <ControlWrapperAttribute>(); ControlWrapper pluginControlWrapper = pluginControlWrapperAttribute?.ControlWrapper ?? ControlWrapper.LayoutAnchorable; InstanceAllowance pluginInstanceAllowance = pluginInstanceAllowanceAttribute?.InstanceAllowance ?? InstanceAllowance.Single; string pluginName = pluginNameAttribute?.PluginName ?? type.Name; // double check to make sure the PluginName wasn't set to "" or string.Empty if (string.IsNullOrWhiteSpace(pluginName)) { pluginName = type.Name; } pluginModelCollection.Add(new PluginModel(type, pluginInstanceAllowance, pluginName, pluginControlWrapper)); } catch (Exception ex) { throw new PluginException(FormattableString.Invariant($"An error occurred attempting to build a plug-in model for type {type}."), ex); } } return(pluginModelCollection); }
/// <summary>Initializes a new instance of the <see cref="PluginInstanceAllowanceAttribute"/> class.</summary> /// <param name="instanceAllowance">The instance allowance.</param> public PluginInstanceAllowanceAttribute(InstanceAllowance instanceAllowance) { InstanceAllowance = instanceAllowance; }