2012-01-07 22 views
0

關於IOC Castle Windsor wiki [編者按:編寫此問題後,wiki已更新爲更多示例代碼],有以下(不完整)演示代碼。如何從Castle Windsor文檔運行提供的IOC(Inversion Of Control)演示?

如何完成此代碼,以便在C#控制檯應用程序中正確運行?

//application starts... 
var container = new WindsorContainer(); 

// adds and configures all components using WindsorInstallers from executing assembly 
container.Install(FromAssembly.This()); 

// instantiate and configure root component and all its dependencies and their dependencies and... 
var king = container.Resolve<IKing>(); 
king.RuleTheCastle(); 

// clean up, application exits 
container.Dispose(); 

更新:

發現tutorial videos on IOC in general

得到儘可能增加一個接口和一個具體實現的接口:

interface IKing 
{ 
    void RuleTheCastle(); 
} 

public class King 
{ 
    void RuleTheCastle() 
    { 
     Consolel.Write("Rule the castle."); 
    } 
} 

然而,當我跑扔運行時錯誤。

更新:

我結束了使用Ninject,因爲:

  1. 的文檔是遠遠優於溫莎城堡(和Spring.NET爲此事)。
  2. 它使用expression compilation/LCG,所以它比使用Reflection的Castle Windsor更快(8倍到50倍)。

要開始,點擊「訪問道場」,然後按照series of NInject tutorials on GitHub

完成此操作後,您可以查看tutorial video on TekPub。該視頻確實很快涉及了這些概念,所以最好先完成series of NInject tutorials on GitHub

+0

呃,爲什麼不合理?如果溫莎城堡看起來很簡單,那麼在溫莎維基上完成示例演示代碼不是很簡單,所以它可以工作嗎? – Contango 2012-01-07 19:59:18

+1

除了例子之外,你還寫了一些代碼嗎?如果不是,則需要創建IKing接口,創建一個實現IKing接口的具體類,並創建一個配置,告訴Castle.Windsor將IKing解析爲具體的類。 – 2012-01-07 20:08:53

+0

我創建了IKing接口,並創建了一個實現IKing接口的具體類。我沒有創建一個配置來告訴Castle.Windsor將IKing作爲具體的類來解決 - 我認爲這會自動發生。 – Contango 2012-01-07 20:18:59

回答

2

通常,爲了在C#控制檯應用程序來應用的IoC你會使用的入口點(例如,Main方法):

  • 實例化和配置IoC容器 - 的前兩行中的示例代碼
  • 用途的容器建立一個對象圖(一個對象和它的依賴) - 的代碼第三線
  • 通控制到所解析的對象,通常通過調用一個方法在其上 - 後應用代碼
  • 4號線完成後,告訴容器進行任何清理就需要執行 - 代碼5日線

這是什麼代碼演示禮物,從這點的觀點是完整的。

然而,爲了使這個應用程序的工作還有其他兩個非常重要的先決條件:

  • 應用程序必須在設計時考慮到反轉的,控制原則(這其實是最困難的部分)
  • 控制檯應用程序的入口點程序集必須包含用於配置容器的Windsor Installers,並且基本上定義了何時需要接口時將使用哪些具體類型。

在這個例子中,安裝程序類的代碼是這樣的:

public class KingApplicationInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(
      Component.For<IKing>().ImplementedBy<King>()); 
    } 
} 
+0

太棒了!我現在就試試。 – Contango 2012-01-07 20:48:56

+2

首頁上的代碼應該只是告訴你如何使用'WindsorContainer'類,而不是一個完整的示例應用程序。因此它不包括'IKing'和'King'類型以及它們的(隱含的)安裝程序。我意識到缺乏新人的安裝程序可能會讓人費解,所以我增加了一個。 – 2012-01-07 22:58:01

+0

@KrzysztofKoźmic:+1添加了_conventions-based_ installer示例。這讓我想起了你在NDC 2011上給出的​​鼓舞人心的演講。 – GolfWolf 2012-01-07 23:24:43

相關問題