2012-12-21 71 views
3

定義我具有以下WCF類類型的屬性:反思類與deparate組件

namespace BusinessServices.Exposure.Data 
{ 
    [DataContract] 
    public class RiskItemBO : ExposureBO 
    { 
     [DataMember] 
     public RiskItemBusinessService RiskItemBusinessService { get; set; } 
    } 
} 

RiskItemBusinessService是其在某些其它DLL中定義,並且由StringIntShort變量的類。我有方法來爲這些數據類型生成隨機值。

我有以下問題:

我使用Type.GetProperties()來得到一個類中的所有屬性,它確實給我的財產RiskItemBusinessService的名字,但是,當我嘗試做PropertyInfo.PropertyType,我得到FileNotFoundExceptionRiskItemBusinessService,位於不同的DLL中)。爲此,我捕獲異常並將DLL加載到catch子句中,但仍然當我嘗試執行PropertyInfo.SetValue時,即使我剛剛使用Assembly.LoadFile加載了DLL,我仍然得到FileNotFoundException

+2

嘗試使用這樣的:http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getreferencedassemblies.aspx –

+0

@Xtudio:有沒有辦法來加載多個程序集,所以我不沒有得到'FileNotFoundException'? –

+0

你必須引用你使用的程序集。你不能動態加載它們,讓它們突然開始工作。 –

回答

2

如果您希望在客戶端的服務參考中使用重用的程序集,可能會出現這種情況。

基本上,正如約翰指出的那樣,您添加了一個對包含RiskItemBusinessService的程序集的引用。然後,轉到「服務參考」配置並啓用該選項以重新使用引用的類型,對於特定引用,請勾選您剛添加的程序集。這將重新生成服務引用,而不使用指定類型的代理。從這裏你的服務將構建來自程序集引用的變量,所以你應該可以像使用其他類型一樣使用它。 enter image description here

+0

謝謝!這解決了我的問題。仍然不是我所期待的,但現在很好。我希望能夠製作一個通用的工具,它是獨立於環境和參考的。爲此,如果您提供DLL路徑和類名稱,它將創建該類的一個實例,並遞歸填充該類中的其餘值。 –