我的文章里已经多次介绍 imitate-login ,这是我最近一直在维护的一个使用c#模拟社交网站登录的开源项目,现在新增了对插件的支持以及一个新的网站(由于某种原因,会在文章结束部分介绍;而且仅会出现在博客中)。希望喜欢的读者可以通过 Star & fork 来支持我,我也会据此来决定时间的分配。

imitate-login 现在已经提供了对插件的支持;目前有两个部分使用到了插件机制,登录自身实现以及登录过程中的验证码识别过程;其中登录过程仅支持 MEF(Managed Extensibility Framework)模式,而验证码识别过程支持 Thrift RPC (Apache Thrift)、HTTP RESTful (POST/GET)、MEF 三种方式。下面将介绍这三种插件的开发与配置方式,所有代码均已经在 Extensions 。

Thrift RPC


在 Imitate Login 的库中有通过 Thrift 文件生成的类 ThriftOperation,如果你使用其它语言开发,请通过 Thrift 生成对应的类,下面将介绍使用C#来开发插件。

首先,创建一个控制台应用程序,新增一个类继承 ThriftOperation.Iface 并实现,这里直接 return 一下:

class demo : ThriftOperation.Iface
{
public string Operation(OperationObj operationObj)
{
return "";
}
}

然后在主函数里增加一个创建 Thrift 服务端得方法:

static void Main(string[] args)
{
int port = ; string str = ConfigurationManager.AppSettings["ServerPort"];
if (!string.IsNullOrEmpty(str))
int.TryParse(str, out port); if (args != null && args.Length == )
{
int.TryParse(args[], out port);
} Start(port);
} public static void Start(int port)
{
TServerSocket serverTransport = new TServerSocket(port, , false);
ThriftOperation.Processor processor = new ThriftOperation.Processor(new demo());
TServer server = new TSimpleServer(processor, serverTransport);
Console.WriteLine("Starting server on port {0} ...", port);
server.Serve();
}

在使用时,你需要先启动该插件程序,然后将下面配置部分合并放到程序运行目录的 extension.conf 文件:

{
"ExtendType": ,
"SupportSite": [],
"Path": null,
"Host": "127.0.0.1",
"Port": ,
"UrlFormat": null,
"HttpMethod": null
}

你可以使用 PluginConfigBuild 工具来生成配置文件,此处不再解释具体细节。

HTTP RESTful


另外一种插件方式即使用通用的 Http RESTful API 来实现,如果通过 GET 方法,你仅能传入一个枚举用来表明网站以及一个字符串作为参数;如果你通过 POST 方法,需要通过 Thrift 获得一个 OperationObj 类的定义,当然 C# 可以通过直接引用 imitate-login 库来获得。API 的编写方法不再累述,接下来你需要将以下配置部分合并放到程序运行目录的 extension.conf 文件:

{
"ExtendType": ,
"SupportSite": [],
"Path": null,
"Host": null,
"Port": ,
"UrlFormat": "http://localhost:2920/Mail/SendMail?loginSite={0}&imageUrl={1}",
"HttpMethod": "GET"
}

MEF


MEF 是微软在 .NET 4.0 以后原生提供的一种插件模式;使用该方法需要用到 IMEFOperation 类,你需要通过引用 imitate-login 得到,demo 代码如下:

[Export(typeof(IMEFOperation))]
[ExportMetadata("loginSite", LoginSite.Baidu)]
public class demo : IMEFOperation
{
public string Operate(string imageUrl = "", Image image = null, params string[] param)
{
return "";
}
}

这种方式需要在配置文件中指定插件的存放位置,位置支持相对运行目录或绝对目录;本例为将该插件生成的 dll 拷贝到程序运行目录下的 Extensions 目录中,配置文件如下:

{
"ExtendType": ,
"SupportSite": [, ],
"Path": "Extensions",
"Host": null,
"Port": ,
"UrlFormat": null,
"HttpMethod": null
}

所有的配置文件均可以通过 PluginConfigBuild 工具来生成,其中 SupportSite 为支持的登录网站的枚举数组。

好了,接下来需要什么自己动手试试吧!

部分内容将仅在个人博客中展示,请查看原文网址!

本文来自 The NewIdea,作者 Carey Tzou 。
原文地址:http://www.tnidea.com/imitate-login-support-plugin-now.html
未经授权,拒绝任何全文及摘要转载!

ImitateLogin新增插件机制以及又一个社交网站的支持的更多相关文章

  1. Python实现插件机制——自动import一个目录下的所有.py文件

    假设有这样一个目录结构: /src          main.py          /plugins                __init__.py                a.py  ...

  2. 社交网站好友储存设计和实现(PHP+MySQL)

    最近手头的一个网站新增社交功能,用户可以互加好友. 通常,对好友列表设计是新增一个好友,就往好友列表新增一行,当要查询一个用户好友 SELECT * FROM WHERE userid="1 ...

  3. koahub.js 0.09 发布,新增钩子机制

    koahubjs发布0.09 新增钩子机制添加钩子机制,控制器钩子和函数钩子修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法记koahubjs钩子开发过程在使用koah ...

  4. [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)

    本系列目录:Abp介绍和经验分享-目录 Abp的模块系统支持插件机制,可以在指定目录中放置模块程序集,然后应用程序启动时会搜索该目录,加载其中所有程序集中的模块. 如何使用这套机制进行功能插件化开发? ...

  5. Dubbo原理和源码解析之“微内核+插件”机制

    github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...

  6. Cocoapods插件机制浅析

    原文链接 背景 虽然做iOS开发的过程中使用过 Cocoapods, 但是对里面的细节了解其实不算太多,直到这两年做织女项目时,通过对Cocoapods进行Qt支持改造才开始深入了解部分细节,这个过程 ...

  7. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

  8. 【学】jQuery的源码思路6——增加each,animaion,ajax以及插件机制

    each() 插件机制 animation ajax //each() //这里第一个参数指定将this指向每次循环到的那个元素身上,而第三个参数element其实就是this本身所以和第一个参数是一 ...

  9. Maven生命周期和插件机制

    Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...

随机推荐

  1. Delphi 10 Seattle Update 1 修复 iOS HTTP 协定需求

    在 iOS 9 Apple 加入了 HTTP 协议,还好有 TMS 提供快速修复工具,得以能顺利上架到 App Store. 现在 Delphi 10 Seattle Update 1 提供了这个设定 ...

  2. 修复 XE7 , XE8 Frame 内 PopupMenu 快捷键失效问题

    问题:将 Frame 含 PopupMenu 放置 Form 后,在 Frame 里的 PopupMenu 失效,无法按快捷键. 适用:(XE7 update 1 / XE8) for Windows ...

  3. 2015暑假多校联合---Problem Killer(暴力)

    原题链接 Problem Description You are a "Problem Killer", you want to solve many problems. Now ...

  4. Scalaz(32)- Free :lift - Monad生产线

    在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等.我们也证明了List[A]是个free mono ...

  5. VS code 安装react-native代码提醒

    上GitHub:https://github.com/Microsoft/vscode-react-native Getting started Install VS Code (0.10.10+ i ...

  6. C#语言的基础

    一.C#的引入 01..net和C#的区别 1)大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. 2).net ...

  7. clicaptcha中文点击验证码开发经验总结

    现在的验证码真是越来越高级了,12306 的找图验证码,极验的拖动式验证码,还有国外的一些黑科技,能智能判断你是不是机器人的验证码. 验证码的更新迭代让我突然对传统验证码一下子不满足了,出于挑战自我和 ...

  8. Code First :使用Entity. Framework编程(3) ----转发 收藏

    第三章 对属性使用约定和配置 在第2章,对Code First的约定以及如何通过配置覆写默认约定行为进行了大致的介绍.学习了如何使用Data Annotations进行配置,也学习了如何使用Fluen ...

  9. 简洁的jQuery cxMenu 手风琴导航

    版本: jQuery v1.7+ jQuery cxMenu v1.2 注意事项: 自动判断是否有子导航,有则显示并不触发链接,无则触发链接. 实例预览 使用方法 载入 JavaScript 文件 & ...

  10. 带给你灵感:30个超棒的 SVG 动画展示【上篇】

    前端开发人员和设计师一般使用 CSS 来创建 HTML 元素动画.然而,由于 HTML 在创建图案,形状,和其他方面的局限性,它们自然的转向了 SVG,它提供了更多更有趣的能力.借助SVG,我们有更多 ...