NetCore基于依賴注入的封裝

通常我們新建一個(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è)置,如下截圖:

image.png

6. 引用庫(kù)

通過(guò)Nuget管理添加這個(gè)庫(kù)之后使用就很方便了。

  1. 注冊(cè)服務(wù)
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    
    services.Configure<SMSUpassOptions>(Configuration.GetSection("UpassSMS"));
    services.AddUpassSMS();
}
  1. appsettings.json里添加配置
{
  "UpassSMS": {
    "sid": "053308d468f",
    "token": "3b7ea335dff397",
    "appid": "113f01e3a7ba3b1"
  }
}

  1. 使用服務(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 炎炎夏季,寶寶濕疹又到了高發(fā)季節(jié),寶媽們常常為此煩惱不已,真的是生在寶寶身,疼在媽媽心。那么該如何處理好寶寶的濕疹...
    juyou2726閱讀 247評(píng)論 0 0
  • 一、覺(jué)察日記 【事實(shí)】今天進(jìn)行了一場(chǎng)教練對(duì)話,走進(jìn)自己的內(nèi)心了解自己近期的狀態(tài)的真實(shí)原因 【感受】從焦慮無(wú)助到放松...
    以詩(shī)為名閱讀 106評(píng)論 0 0

友情鏈接更多精彩內(nèi)容