Castle Windsor 的動態代理類如何獲取實際類型

来源:https://www.cnblogs.com/myzony/archive/2019/03/07/10487418.html
-Advertisement-
Play Games

問題 在實際開發過程當中我們可能會針對某些類型使用動態代理技術(AOP),註入了一些攔截器進行處理,但是一旦某個類型被動態代理了,那麼就會生成一個代理類。這個時候在該類內部使用 方法獲取到的 類型並不是實際類型的 ,而是代理類的 。 解決 那麼我們如何在代理類當中獲取到具體類型的 呢?其實 Cast ...


問題

在實際開發過程當中我們可能會針對某些類型使用動態代理技術(AOP),註入了一些攔截器進行處理,但是一旦某個類型被動態代理了,那麼就會生成一個代理類。這個時候在該類內部使用 GetType() 方法獲取到的 Type 類型並不是實際類型的 Type,而是代理類的 Type

解決

那麼我們如何在代理類當中獲取到具體類型的 Type 呢?其實 Castle 給我們提供了一個工具類,叫做 ProxyUtil ,可以使用該工具類來獲取到代理類所攔截的具體類型,下麵的代碼就是具體的使用方法。

DEMO 代碼:

/// <summary>
/// 獲得實例對象的真實類型
/// </summary>
/// <param name="instance">待獲取類型的實例對象</param>
/// <returns>實例對象的真實類型</returns>
public static Type GetProxyClassRealType(this object instance)
{
   Type realType;
   if (ProxyUtil.IsProxy(instance))
  {
       realType = ProxyUtil.GetUnproxiedType(instance);
  }
   else
  {
       realType = instance.GetType();
  }

   return realType;
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可變對象與不可變對象 要理解深拷貝和淺拷貝,首先要理解可變對象和不可變對象。 不可變對象:該對象所指向的記憶體中的值不能被改變,修改對象的值時,由於其指向的值不能被改變,因此實際上是在記憶體中重新開闢一個地址用來存儲新的值,然後將對象指向這個新值。本質上是兩個對象,賦值前後對象id發生了變化。pytho ...
  • 這篇博客記錄@InitBinder怎麼起作用、起什麼作用? 首先,該註解被解析的時機,是該匹配Controller的請求執行映射的方法之前; 同時 @InitBinder標註的方法執行是多次的,一次請求來就執行一次。 當某個Controller上的第一次請求由SpringMvc前端控制器匹配到該Co ...
  • 首先,作業要求概括如下: 根據首碼表達式文法,實現statements() 和expression() 兩個函數。 並且要求使得語義分析在完成分析首碼表達式並輸出中間代碼的同時,也能夠將首碼表達式翻譯為中綴表達式, 且要求翻譯後的中綴表達式中儘可能少用括弧。 舉例如下: 輸入"+ a * b c;" ...
  • 在未來某個指定的時間點或者經過一段時間延遲後執行某個事件,這時候就需要用到定時器了。定時器的實現方式有很多種,今天總結最簡單的實現方式。java 1.3引入了定時器框架,用於在定時器上下文中控制線程的執行,其由類Timer和TimerTask構成。Timer適用於大規模併發調度定時任務,在內部,該類 ...
  • 1、使用Java EE 在eclipse 開發動態的Web工程(Java web項目)1)開發開發選項切換到JavaEE2)可以在Windows->show view中找到package explorer,並將其托拽到開發區的左邊3)在servers面板中新建tomcat伺服器,一定要關聯到tomc ...
  • ...
  • 1. nginx+lua學習 1.1. 網關架構 1.2. nginx命令和信號控制 1. nginx s stop 快速關閉,不管有沒有正在處理的請求 nginx s quit 優雅關閉方式,推出前完成已經接受的連接請求 2. nginx c nginx配置文件地址 啟動 3. nginx s r ...
  • 前面介紹各種容器之時,通過在容器名稱後面添加包裹數據類型的一對尖括弧,表示該容器存放的是哪種類型的元素。這樣一來總算把Java當中的各類括弧都湊齊了,例如包裹一段代碼的花括弧、指定數組元素下標的方括弧、容納方法輸入參數的圓括弧,還有最近跟在容器名稱之後的尖括弧。可是為什麼尖括弧要加到容器後面呢?它還 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...