2012-01-07 59 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

相关问题