2012-07-09 86 views
0

如何配置我的應用程序使AutoMapper可以映射到Silverlight 5中的內部類型和/或屬性?例如,我有以下類型:使用AutoMapper for Silverlight映射到內部類型

internal class SomeInfo 
{ 
    public String Value { get; set; } 
} 

我嘗試調用Mapper.DynamicMap這種類型作爲目的地和我收到以下錯誤在運行時:

嘗試通過安全透明方法 'DynamicClass.SetValue(System.Object,System.Object)'訪問 安全關鍵類型'Acme.SomeInfo'失敗。

我試着先實例化類,然後將實例傳遞給DynamicMap,並將類範圍更改爲public,並使用屬性的內部setter。我還用[SecuritySafeCritical]屬性標記了類。所有這些測試都會導致相同的錯誤消息。

我一直能夠克服這個問題的唯一方法就是用公共範圍和公共設置者完全暴露這個類。這當然是一個問題,因爲我正在開發一個將被其他開發人員使用的類庫,並且使用「內部」作用域是一種故意的策略,用於隱藏實現細節以及確保代碼僅用於預期的目的沒有DDD和CQRS的公共設置者概念)。

這就是說,我該怎麼做才能使AutoMapper能夠處理內部類型和/或屬性?

(注:該類庫是專爲SL5和配置以提升信任外的瀏覽器上運行的客戶端應用程序使用)

回答

1

這更是一個Silverlight的限制 - 它不允許在反射私營/保護/內部從外面議會的議員,請參閱:

http://msdn.microsoft.com/en-us/library/stfy7tfc(VS.95).aspx

簡而言之 - AutoMapper無法訪問您的程序集的內部成員。

+0

MEF如何做到這一點? – SonOfPirate 2012-07-13 12:08:48

+0

如何在我的程序集中使用InternalsVisibleTo屬性來授予AutoMapper對我的內部類型的訪問權限?看起來,這使我有一個內部構造函數,但我仍然不能在我的屬性上有內部setter。仍然不知道我明白爲什麼我可以在SL中導入內部屬性,但AutoMapper無法設置它們。 – SonOfPirate 2012-07-14 16:51:02