2011-05-04 102 views
0

我正在爲客戶端開發一個應用程序,並正在實施插件體系結構。在這裏和其他地方有很多討論和例子都幫助我瞭解基礎知識,並且我有一個工作原型。.net插件體系結構問題

在啓動時,我遍歷了plugins文件夾中的程序集,循環遍歷每個類中的類型,並創建了實現我的插件接口的類型的實例。我使用的每種類型的「名稱」屬性來填充在主窗體上的菜單中選擇,但我不是很高興這樣做的原因有兩個:

  1. 我想我可以得到名字我有興趣不必創建一個實例,也許有屬性?沒有太多的經驗,我不知道如何做這項工作,或者確實如果這是可以/應該如何完成的。

  2. 給定一組N個插件,我的應用程序在任何特定運行過程中可能不需要所有這些插件的實例,但可能需要其中一個M實例,所以對我來說創建沒有任何意義加載時的實例。

有人可以幫助我理解建築師的最佳方法嗎?

非常感謝!

Bo

回答

2

是的,你可以使用屬性。屬性可用於類型,與類型的實例相關。問題在於你必須迭代所有程序集中的所有類型來查看你的屬性是否存在。這不是太複雜,但可能會有問題,如果你錯過任何DLL依賴關係。

在附註中,您是否調查了MEF?它是開箱即用的.NET 4的一部分,可以爲您處理大量的這類事情。

+0

謝謝,內特。我沒有看過MEF,但會這樣做。今天下午我一直在嘗試自定義屬性,這看起來非常平易近人。 – 2011-05-04 22:20:12

0

我寫了一篇關於製作插件系統幾年前的一篇文章:http://www.codeproject.com/KB/macros/pluginsystem.aspx

陷阱:

  • 你應該在一個單獨的AppDomain您的屬性之後掃描所有組件。因爲他們不能卸載。
  • 如果你想能夠卸載插件,你需要加載每個插件在一個單獨的appdomain。
  • 在做其他事情之前創建一個異常策略。
  • 嘗試使用現有的插件框架,如果你能
+0

謝謝,jgauffin。我看了你的插件系統,這幾乎是我自己想出的。不過,您對單獨的應用程序域的建議是一個很好的建議 - 我會研究這一點。 – 2011-05-04 22:21:21