【发布时间】:2012-01-07 19:37:32
【问题描述】:
在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();
更新:
发现tutorial videos on IOC in general。
至于添加接口和接口的具体实现:
interface IKing
{
void RuleTheCastle();
}
public class King
{
void RuleTheCastle()
{
Consolel.Write("Rule the castle.");
}
}
但是,当我运行它时,它引发了运行时错误。
更新:
我最终使用了Ninject,因为:
- 文档远远优于 Castle Windsor(以及 Spring.NET)。
- 它使用 expression compilation/LCG,因此与使用反射的 Castle Windsor 相比,它的速度更快(8 倍到 50 倍)。
要开始使用,请点击“参观道场”,然后通过series of NInject tutorials on GitHub 进行操作。
完成此操作后,您可以查看tutorial video on TekPub。该视频确实很快地介绍了这些概念,因此最好先完成series of NInject tutorials on GitHub。
【问题讨论】:
-
呃,为什么要投反对票?如果温莎城堡真的像想象的那么简单,那么完成温莎wiki上的示例演示代码不应该很简单吗?
-
除了示例之外,你还写了一些代码吗?如果没有,您需要创建 IKing 接口,创建一个实现 IKing 接口的具体类,并创建一个配置来告诉 Castle.Windsor 将 IKing 解析为您的具体类。
-
我已经创建了 IKing 接口,并创建了一个实现 IKing 接口的具体类。我没有创建一个配置来告诉 Castle.Windsor 在哪里将 IKing 解析为具体类 - 我认为这会自动发生。
-
您需要在程序集中添加一个Windsor Installer,让Windsor知道IKing接口将在运行时由King具体类解析。
标签: c# inversion-of-control castle-windsor