如何运行Castle Windsor文档中提供的IOC(控制反转)演示

本文关键字:IOC 控制 演示 文档 何运行 运行 Castle Windsor | 更新日期: 2023-09-27 18:19:47

在IOC Castle Windsor wiki上[编者按:在写完这个问题后,wiki已经更新了更多的示例代码],有以下(不完整的)演示代码。

如何完成此代码,使其在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();

更新:

发现了国际奥委会的教程视频。

甚至添加了一个接口和接口的具体实现:

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

然而,当我运行它时,它抛出了一个运行时错误

更新:

我最终使用了Ninject,因为:

  1. 该文档远远优于Castle Windsor(以及Spring.NET)
  2. 它使用表达式编译/LCG,因此与使用反射的Castle Windsor相比速度更快(8到50倍)

要开始,请单击"访问Dojo",然后在GitHub上完成一系列NInject教程。

完成此操作后,您可以在TekPub上查看教程视频。视频确实很快就完成了这些概念,所以最好先在GitHub上完成一系列NInject教程。

如何运行Castle Windsor文档中提供的IOC(控制反转)演示

通常,为了在C#控制台应用程序中应用IoC,您将使用入口点(例如Main方法):

  • 实例化并配置IoC容器-示例代码中的前两行
  • 使用容器构建对象图(对象及其依赖项)-第3行代码
  • 将控制传递给已解析的对象,通常通过调用其上的方法-第4行代码
  • 应用程序完成后,告诉容器执行它需要执行的任何清理-第5行代码

这就是代码演示所展示的内容,从这个角度来看,它是完整的。

然而,为了使这个应用程序工作,还有另外两个非常重要的先决条件:

  • 应用程序的设计必须考虑到控制反转原理(这实际上是困难的部分)
  • 控制台应用程序的入口点程序集必须包含Windsor安装程序,这些安装程序用于配置容器,并且基本上定义了在需要接口时将使用的具体类型

本例中安装程序类的代码如下所示:

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