public void ResolvePluginDependencies()
        {
            HashSet <Type> missingPlugins = new HashSet <Type>(_plugins.SelectMany(x => x.GetMissingDependencies(_plugins)));

            if (missingPlugins.Count == 0)
            {
                return;
            }

            foreach (Type type in missingPlugins)
            {
                if (PluginTypes.Contains(type))
                {
                    continue;
                }

                PuppeteerExtraPlugin dep = (PuppeteerExtraPlugin)Activator.CreateInstance(type);
                Use(dep);

                if (dep.Dependencies.Count > 0)
                {
                    ResolvePluginDependencies();
                }
            }
        }
        public PuppeteerExtra Use(PuppeteerExtraPlugin plugin)
        {
            if (plugin.Name == null)
            {
                throw new ArgumentNullException(nameof(plugin));
            }

            if ((plugin.Requirements & PluginRequirements.DataFromPlugins) == PluginRequirements.DataFromPlugins)
            {
                ;//plugin.getDataFromPlugins = this.getPluginData.bind(this)
            }
            //plugin._register(Object.getPrototypeOf(plugin))
            _plugins.Add(plugin);

            return(this);
        }