通常我們新建一個(gè).Net 庫(kù)項(xiàng)目,最后編譯成dll,直接被其它項(xiàng)目引用,或提交到Nuget(包括私有的Nuget服務(wù))上。使用方法通常是:
//1. 靜態(tài)類方法
XXClass.method1();
//2. 實(shí)例化對(duì)象
XXClass xx = new XXClass();
xx.method1();
在NetCore使用一個(gè)第三方庫(kù)很多情況都是類似系統(tǒng)庫(kù)的使用:
//注入服務(wù)
services.AddXXX();
//使用服務(wù)
//在構(gòu)造函數(shù)里直接使用接口
public YYY(IXXX xxx){
}
接下來(lái)看看我們?cè)趺磳?shí)現(xiàn)類似這樣的庫(kù),使用方式和系統(tǒng)一致。
我們以一個(gè)對(duì)一個(gè)第三方發(fā)送短信的服務(wù)封裝例子來(lái)看。
1.定義接口
發(fā)送短信很簡(jiǎn)單,接口如下
public interface IDoSMS
{
bool Send( string code, string mobile,string templateId);
}
2. 注入服務(wù)
這一塊最重要,實(shí)現(xiàn)也很簡(jiǎn)單,參考示例
namespace Microsoft.Extensions.DependencyInjection
{
public static class DoSMSServiceCollectionExtensions
{
public static IServiceCollection AddUpassSMS(this IServiceCollection services,Action<SMSUpassOptions> options=null)
{
if (options!=null)
services.Configure<SMSUpassOptions>(options);
//singleton模式
services.AddSingleton<IDoSMS, DoSMSUpass>();
return services;
}
}
}
這里一定注意namespace是Microsoft.Extensions.DependencyInjection,而不是自己的項(xiàng)目
3. 定義一個(gè)IOptions
主要是為了保持這個(gè)第三方需要用到的三個(gè)key值
最后需要appsettings.json里添加配置這個(gè)第三方需要的值.
public class SMSUpassOptions : IOptions<SMSUpassOptions>
{
public SMSUpassOptions Value => this;
public string sid { get; set; }
public string token { get; set; }
public string appid { get; set; }
}
4. 接口的實(shí)現(xiàn)
最后才是對(duì)上面定義的接口的真正實(shí)現(xiàn)類DoSMSUpass 。這里不列了,實(shí)現(xiàn)很簡(jiǎn)單,第三方提供了webapi調(diào)用
5. 提交到私有的Nuget服務(wù)
私有Nuget服務(wù)的搭建方法可以參考文檔,這個(gè)文檔里提交到Nuget服務(wù)上需要單獨(dú)設(shè)置配置文件,其實(shí)visualstudio已經(jīng)帶了圖形化界面來(lái)設(shè)置,如下截圖:

6. 引用庫(kù)
通過(guò)Nuget管理添加這個(gè)庫(kù)之后使用就很方便了。
- 注冊(cè)服務(wù)
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<SMSUpassOptions>(Configuration.GetSection("UpassSMS"));
services.AddUpassSMS();
}
- appsettings.json里添加配置
{
"UpassSMS": {
"sid": "053308d468f",
"token": "3b7ea335dff397",
"appid": "113f01e3a7ba3b1"
}
}
- 使用服務(wù)
public class ValuesController : Controller
{
IDoSMS sms;
public ValuesController(IDoSMS _sms)
{
sms = _sms;
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
//88928是驗(yàn)證碼
//18511111234是手機(jī)號(hào)
//368230是模板id,每個(gè)項(xiàng)目需要申請(qǐng)一個(gè)模板id
bool b = sms.Send("88928", "18511111234", "4820");
return new string[] { "value1", "value2"+b };
}
}
最終實(shí)現(xiàn)這種封裝方式,使用非常簡(jiǎn)單。
所有源碼參考github