日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)

發布時間:2024/1/16 windows 31 coder
生活随笔 收集整理的這篇文章主要介紹了 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)

前言

前文排版比較糟糕,這次我們使用vscode來寫本文,,各位看客請見諒。
上文描述了 ServiceDescriptor 的三種構造形式,這決定了我們之后獲取原始對象要考慮的場景,至于如何獲取暫且不表,在實現細節部分我們會詳細闡述。
本文將闡述 _ProxyGenerator_的一些細節,以便各位看客更好理解 Castle 在各種場景下 如何選擇合適的接口去構建代理對象(以下全稱為代理對象或者 proxy

代理對象的構建方法

大體分成兩種方式 一種是具體類 一種是根據接口生成代理對象,每種內部都會區分是否傳入原始對象 看方法簽名 WithTarget 即需要傳入 原始對象,WithoutTarget 即不需要傳入原始對象,

  • ProxyGenerator.CreateClassProxy
  • ProxyGenerator.CreateInterfaceProxy

示例說明

接下來我們以幾種示例來介紹各個接口的使用情況

  • 假設已知 一個接口 ISampleService 和一個實現類 SampleService
public class SampleService : ISampleService
{
  public virtual Task  ShowAsync()
  {
    return Task.CompletedTask;
  }
}

public interface ISampleService 
{
   Task ShowAsync();
}

public class Interceptor : IInterceptor
{
    public  void Intercept(IInvocation invocation)
    {
        Console.WriteLine("Interceptor  starting...");
        invocation.Proceed();
        Console.WriteLine("Interceptor  ended...");
    }
}

具體類

我們想對 SampleService 進行代理生成 因為 SampleService 具有無參構造,所以我們可以這樣

var generator=new ProxyGenerator();
var proxy = generator.CreateClassProxy(typeof(SampleService), new Interceptor());

假設 SampleService 有參數構造函數

public class SampleService : ISampleService
{
    private readonly ILogger<SampleService> _logger;
    public SampleService(ILogger<SampleService> logger)
    {
        _logger=logger;
    }
    public Task ShowAsync()
    {
        return Task.CompletedTask;
    }
}
```,那么我們就可以這樣
``` csharp
var generator=new ProxyGenerator();
var  sampleSvc=sp.GetRequiredService<SampleService>();
var proxy = generator.CreateClassProxyWithTarget(typeof(SampleService),sampleSvc, new Interceptor());

細心的朋友可能發現這時候我們引入了一個變量 而我們并未定義,
這時候我們添加如下代碼:

    var services=new ServiceCollection();
    services.AddLogging();//此處添加日志服務 偽代碼 以便獲取ILogger<SampleService>
    services.AddSingleton<ProxyGenerator>(sp=>new ProxyGenerator());
    servies.TryAddTransient<SampleService>();
    var sp=services.BuildServiceProvider();

接口

使用以上代碼示例,假設我們要對 ISampleService 進行代理生成,那么我們就可以這樣

services.TryAddTransient<ISampleService, SampleService>();//注入階段添加以下代碼以便獲取ISampleService
var generator=sp.GetRequiredService<ProxyGenerator>();
var proxy=generator.CreateInterfaceProxyWithoutTarget(typeof(ISampleService),new Interceptor());//因為沒有傳入 原始對象,所以依然要求我們是一個無參構造的實現 TODO:可自行驗證

看下原始定義

假設我們獲取了 _ISampleService_的實例

var  sampleSvc=sp.GetRequiredService<ISampleService>();
var proxy = generator.CreateInterfaceProxyWithTarget(typeof(ISampleService),sampleSvc, new Interceptor());

可以發現 接口代理 和具體類代理 基本相似
細心的可以注意到 SampleService.ShowAsync 很反常的 加了個關鍵字 virtual,想知道為什么,這里我們借用 Castle 的文檔 https://github.com/castleproject/Core/blob/master/docs/dynamicproxy-introduction.md 有興趣的朋友可以自行查詢

總結

說到這里,我們已經基本了解了 castle構建動態代理的基本方法,接下來我們來總結一下代理對象的構建方法。 先區分目標是類還是接口,類的代理方法要求關鍵字virtual,無參構造可以使用 CreateClassProxy,有參數可以先獲取到原始對象,傳入 CreateClassProxyWithTarget;
接口同,無原始對象 CreateInterfaceProxyWithoutTarget ,有原始對象 CreateInterfaceProxyWithTarget
代碼太多有點枯燥,本文先到這邊。

總結

以上是生活随笔為你收集整理的聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线免费观看一区 | 免费国产视频在线观看 | 深夜成人福利 | 久草视频资源 | 激情在线网站 | 黄色a级免费 | 亚洲高清无码久久久 | 飘花影院伦理片 | 按摩ⅹxxx性hd中国 | 老女人做爰全过程免费的视频 | 国产精品剧情一区 | 亚洲天堂男人av | 最新中文字幕久久 | 欧美超碰在线 | 精品国产欧美一区二区三区成人 | 黄网www| 黄色网址在线免费看 | 在线h片 | 中文字幕在线视频日韩 | 一级片网址 | 乳色吐息免费看 | 午夜福利三级理论电影 | 精品| 国产成人精品无码播放 | 91在线视频免费播放 | 日日爽天天 | 久热这里只有精品6 | 黄色片特级 | 欧美激情校园春色 | 欧美私人影院 | 视频在线一区二区 | 3d动漫精品啪啪一区二区竹菊 | 亚洲二三区| 受虐m奴xxx在线观看 | 日本黄色xxxx | 欧美国产成人在线 | 亚洲国产精品无码观看久久 | 性做久久久久久久免费看 | 亚洲国产精品久久久久久久 | 国产精品成人av久久 | 亚洲国产tv | 精品自拍av| 图片区视频区小说区 | 爱操综合| 成人自拍网 | 国产理论一区 | 韩国美女av | 孕妇爱爱视频 | 九色丨蝌蚪丨成人 | 亚洲97在线| 天天色综合av| 新天堂在线 | 国产一区二区久久 | 日本熟伦人妇xxxx | 国产三级三级在线观看 | 99精品视频99 | 久久色视频 | 国产主播喷水 | 国产精品成人免费精品自在线观看 | 国产激情无码一区二区三区 | 伊人avav | 成人观看视频 | 91爱啪啪| 久久久精品人妻一区二区三区四 | 成年人黄色在线观看 | 中文字幕一区二区三区精彩视频 | 人人爽爽人人 | 天天爱天天插 | 亚洲中文字幕无码不卡电影 | 久久精品10| 啪视频在线 | av在线首页 | av在线激情 | 黄色美女av | 国产成人精品一区二区无码呦 | 日韩精品第二页 | 久青草资源福利视频 | 欧美成人a∨高清免费观看 国产精品999视频 | 久久久久国产精品无码免费看 | 日本成人激情视频 | 97人妻人人揉人人躁人人 | 成人区精品一区二区婷婷 | 高清乱码免费看污 | www.看毛片| 亚洲欧美一区二区在线观看 | 狠狠网| 欧美sm视频| 午夜激情福利视频 | 国产做爰全过程免费视频 | 中文字幕一区二区三区四区不卡 | 久久作爱 | 日韩毛片基地 | 国产一二区在线观看 | 欧美日韩一区二区三区电影 | 日韩精品一区二区三区四区五区 | 偷拍女澡堂一区二区三区 | 中文字幕一区二区三区四区欧美 | 天堂8在线 | 2019中文字幕在线视频 |