Пример #1
0
 /// <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;
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
 /// <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;
 }