2012-02-04 54 views
3

我與具有主程序的架構工作。當它啓動時,它會通過反射來查看執行路徑,這些DLL已經從基類繼承。這些是插件。國際奧委會的WinForms插件架構

當一個新項目的新要求,通常出現一個新的插件被創建。這個插件具有主插件類,然後可能還有許多其他類和窗體。

主要插件類具有初始化方法,但由於其類庫沒有Program.cs中這麼說要連接的依賴。

有沒有辦法通過一個app.config來連接依賴關係,或者你認爲我應該避免使用IOC容器,並且在插件類中只有一個工廠方法來連接依賴關係?

的問題是,我可能沒有主應用程序的代碼更改設置IOC容器

+0

我不知道我明白。爲什麼你不能通過構造函數注入你的依賴? – 2012-02-04 20:06:49

+0

好吧,我可以把我的依賴接口的構造函數的參數,但我不知道我是如何實現IOC容器,因爲我沒有Program.cs中,以將它們連接起來 – Jon 2012-02-04 20:09:36

回答

2

的能力,所有主要的IoC容器必須連線了的app.config或通過裝配發現機制的依賴關係(的能力像你描述的那樣)。通常,主應用程序設置容器,然後根據容器查找插件(可以通過配置或通過裝配探測來配置,如上所述)。

對於SpringFramework.net,爲的app.config的例子:http://www.springframework.net/doc-latest/reference/html/objects.html#d4e437

對於溫莎城堡,集探測的一個例子:http://stw.castleproject.org/Windsor.Installers.ashx

+0

他們怎麼知道何時執行裝配發現的地方嗎? – Jon 2012-02-04 20:12:54

+0

這是由應用程序代碼配置/控制。我對Castle很熟悉 - 在這種情況下,當你調用'container.Install'時,就會發生這種情況,就像我鏈接到的例子。我相信春天有一個非常可比的方法。 – 2012-02-04 20:14:54

+1

我的問題是,我可能無法觸及的應用程序代碼 – Jon 2012-02-04 20:19:21

1

雖然我認爲你的問題有點含糊,基於什麼我從你的問題收集我不得不說IoC很可能是最好的方式!如果你喜歡,你可以使用你的IoC容器連接工廠,或者你可以用它來連接PlugIn依賴。就我個人而言,我喜歡使用StructureMap。一個非常靈活和易於使用的IoC容器。

你可以使用的app.config列出扶養名稱,然後喂國際奧委會的名稱創建的依賴關係。使用Activator之類的東西來創建實例。就我個人而言,我會同時使用IoC和工廠。我將使用app.config指定依賴項名稱,然後使用Factory來清理plugIn類的實例。最後我會使用IoC容器來指定工廠的實現。

希望這是一些使用的!

+0

這就是反射代碼正在做的事情,如果它發現了正確類型的dll,它會創建它的一個實例,但這是主要的應用程序代碼。此外,如果我有負載的DLL的我可以使用它的app.config而不是主應用程序的app.config? – Jon 2012-02-05 10:11:14