2011-10-28 24 views
0

背景:在我的網站中,第三方HTTP模塊在HttpRuntime緩存中構建對象集合。在我的Web應用程序項目中,我需要檢查Cache中的這些對象,並在發現具有特定屬性值的對象時採取各種操作。需要某種方式將對象從第三方DLL轉換爲本地類的對象

因此,我正在循環緩存集合,嘗試將每個對象轉換爲本地類的實例(與第三方類的設計相同)。 (我知道我可以創建一個對第三方程序集的引用,但程序集可能沒有安裝,所以我嘗試創建一個更健壯的方法)。

但是,演員表不工作。 ASP.NET知道原始對象來自不同的程序集。這是例外:

[A] 3rdParty.HttpModule.CachedRequest不能轉換到 [B] 3rdParty.HttpModule.CachedRequest。類型A源自 '3rdParty.HttpModule,版本= 3.6.0.0,文化=中立, PublicKeyToken =空'在上下文'默認'在位置 'C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 710995cc \ 37f36a76_71e5cb01 \ 3rdParty.HttpModule.dll'。 類型B源於'MyCompany.MyWebsite,版本= 1.4.0.1396, Culture = neutral,PublicKeyToken = null'在上下文'Default' 位置'C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 8bfb9ba0 \ 0c053836_8595cc01 \ MyCompany.MyWebsite.DLL'。

我需要做的就是檢查對象中1個字符串屬性的值。有一些(簡單)的方法來做到這一點?即使將對象序列化爲字符串並解析字符串也沒問題。

感謝

回答

3

.NET是強類型,所以不,你不能施放的目的是不同類型的東西 - 即使存儲佈局恰好是相同的,.NET知道他們不同種類。

要讀取某個對象的屬性,但不具有對其程序集的編譯類型引用,則需要使用Reflection或dynamicdynamic可能更簡單。

dynamic theObject = // get the object from the cache 
DoSomethingWith(theObject.TheProperty); 
+0

完美。這(動態)正是我所需要的並且很容易實現。謝謝! – Laurence

1

如果您需要在應用程序中重複這些步驟,我會建議使用Mapper。

AutoMapper會做你想做的。

它會將變量的內容從一個對象複製到另一個對象中的變量(變量名稱需要匹配)。
然後,您可以使用完全可編輯的對象(添加接口,繼承等),然後在完成後將其「映射」回原始的第三方對象。

相關問題