2012-07-04 17 views
1

我正在開發一個MAF應用程序,它在一個DLL中包含一個類。問題是,其中一個AddIns使用此類的方法之一。例如:MAF與類內DLL傳遞到主機

class A 
{ 
    Property_1 
    Property_2 

    Method_X() 
} 

我的外接程序具有采用A級

MyAddIn.Set(class A); 

所以,用這種方法,我這裏必須將DLL中的管道?或者我應該如何繼續這種情況?

當proyect開始,AddInStore.Update的警告()方法拋出的消息,如:無法連接渠的一部分...

因此,有一篇文章this它說「有MAF提供了許多其他功能,如版本控制,傳遞集合和WPF視覺效果,傳遞非序列化類型等。「但我找不到一個例子。

編輯:

感謝帕諾斯這個link有關合同的限制。經過更多的研究,我發現這個article,它通過Paint.NET proyect顯示如何在主機中使用數據類型而無需引用。

閱讀這兩個來源後,我知道這是我正在尋找。但我還不明白。

作爲最終的請願書,有人可以提供我的代碼示例嗎?只是爲了最終得到它。

謝謝。

+0

之前繼續System.Addin,我勸你看看其他附加的引擎,如MEF例如。 MEF很受歡迎,學習曲線很低。有了System.AddIn,你需要投入大量的時間才能掌握它。請注意,System.AddIn具有插件隔離功能(不同的AppDomain/Processes),這是您自己很難做的事情,也可能是選擇它的唯一原因。如果您正在尋找版本控制,請查看Autofac + MEF。最後,如果你只需要插件功能,MEF應該綽綽有餘。問候。 –

+0

嗨,我已經看過MEF,但是,使用MAF的主要原因是在不關閉應用程序的情況下更新插件,這是至關重要的。據我所知,MEF是不可能的。我的應用程序已經能夠更新AddIn。 – BlackCath

回答

2

您應該研究這些guidelines合約裝配中允許的類型。

基本上你不應該引用你在管道中提到的dll(契約,適配器和視圖),因爲這樣你可以將類型從主機泄漏到加載項。這意味着您將失去版本控制,因爲所有管道段都引用相同的程序集。這意味着如果加載項引用了程序集的v.1,並且契約正在引用v.2,那麼這兩個版本都將被加載,並且會引發InvalidCasrtException。

對此的解決方案是創建一個基於類A的接口並使其成爲合同。然後你的加載項可以提供實現。這樣你就不會失去版本控制。

問候,

帕諾斯

+0

感謝您的幫助。非常足智多謀。我編輯了問題以保持更新。再一次,謝謝。 – BlackCath