/// <summary> /// プラグインクラスのインスタンスを作成する /// </summary> /// <returns>プラグインクラスのインスタンス</returns> public IPlugin CreateInstance(IPluginHost host) { try { //アセンブリを読み込む Assembly asm = Assembly.LoadFrom(this.Location); //クラス名からインスタンスを作成する Plugins.IPlugin plugin = (Plugins.IPlugin)asm.CreateInstance(this.ClassName); //IPluginHostの設定 plugin.Host = host; try { plugin.Config = PluginSettings.loadSettings(this.ClassName); } catch (ConfigLoadException cle) { } catch (PluginConfigNotFoundException pcnfe) { } return(plugin); } catch { return(null); } }
public PluginConfig GetPluginConfig(Plugins.IPlugin plugin) { PluginConfig cfg; if (!KV.TryGetValue(plugin.GetType().GetHashCode(), out cfg)) { cfg = KV[plugin.GetType().GetHashCode()] = new PluginConfig(); } return(cfg); }
private void LoadPlugins() { PluginInfo[] pis = PluginInfo.FindPlugins(); mPlugins = new Plugins.IPlugin[pis.Length]; for (int i = 0; i < mPlugins.Length; i++) { mPlugins[i] = pis[i].CreateInstance(); mPlugins[i].Logger = mLogger; ToolStripMenuItem mi = new ToolStripMenuItem(mPlugins[i].Name); mi.Click += new EventHandler(menuPlugin_Click); Plugins_ToolStripMenuItem.DropDownItems.Add(mi); } }
/// <summary> /// プラグインクラスのインスタンスを作成する /// </summary> /// <returns>プラグインクラスのインスタンス</returns> public Plugins.IPlugin CreateInstance() { try { // アセンブリを読み込む Assembly asm = Assembly.LoadFrom(this.Location); // クラス名からインスタンスを作成する Plugins.IPlugin plugin = (Plugins.IPlugin)asm.CreateInstance(this.ClassName); return(plugin); } catch { return(null); } }
HtmlContainer.HtmlContainer GetHtmlContainerForImages(UrlContainer.UrlContainer uc) { if (IsIgnore(uc.Url)) { return(null); } // URLに対応するプラグインを検索,見つかればCookie取得 Plugins.IPlugin plugin = FindPlugin(uc); var hc = new HtmlContainer.HtmlContainer(uc, mCookieContainer); // Htmlを取得しない if (mSettings.UrlFilter.Filter(uc.Url)) { mSettings.Logger.Write("Downloader", "URL フィルタが適用されました > " + uc.Url); return(hc); } // Htmlを取得する if (mSettings.TitleFilter.Filter(hc.Title)) { mSettings.Logger.Write("Downloader", "タイトルフィルタが適用されました > " + hc.Title); return(hc); } mSettings.Logger.Write("Downloader", uc.Url + " を取得しました"); if (plugin != null && plugin.IsExclusive) { hc.AttributeUrlList = plugin.GetImageUrlList(uc, mSettings.Formats); } else { if (mSettings.ParseHrefAttr) { hc.UpdateAttributeUrlList("a", "href", mSettings.Formats); } if (mSettings.ParseImgTag) { hc.UpdateAttributeUrlList("img", "src", mSettings.Formats); hc.UpdateAttributeUrlList("img", "data-src", mSettings.Formats); } } return(hc); }
HtmlContainer.HtmlContainer GetHtmlContainerForLinks(UrlContainer.UrlContainer uc) { if (IsIgnore(uc.Url)) { return(null); } // URLに対応するプラグインを検索,見つかればCookie取得 Plugins.IPlugin plugin = FindPlugin(uc); var hc = new HtmlContainer.HtmlContainer(uc, mCookieContainer); if (plugin != null && plugin.IsExclusive) { hc.AttributeUrlList = plugin.GetLinkList(hc); } if (hc.AttributeUrlList.Count == 0) { hc.UpdateAttributeUrlList("a", "href", new string[] { "php", "phtml", "html", "htm", "" }); } return(hc); }
/// <summary> /// Load plugins from assembly and instiniate them to list. /// </summary> /// <returns></returns> public static IEnumerable <IPlugin> LoadPluginsEnumerable() { // Load query's processors. System.Reflection.Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); //Console.WriteLine("ASSEMBLIES PROCEED: {0}\n", assemblies.Length); Console.WriteLine("\nDETECTED PLUGINS:"); foreach (System.Reflection.Assembly assembly in assemblies) { // Get all types for assembly. foreach (System.Type type in assembly.GetTypes()) { // Check if this type is subclass of query. if (type.GetInterface("IPlugin") != null) { // Instiniating querie processor. Plugins.IPlugin instance = (Plugins.IPlugin)Activator.CreateInstance(type); Console.WriteLine("{0}", type.Name); yield return(instance); } } } }