基于此声明:
Castle Project IoC容器有两种版本。 MicroKernel是一个轻量级容器,提供IoC和DI的核心功能。 Windsor Container,构建于MicroKernel之上,通过添加对外部配置和拦截器的支持来扩展其功能。大多数时候你最终会使用Windsor,但为了简单起见,我将首先说明如何使用MicroKernel实现IoC和DI。
...在this article中(BTW,这是我发现的最好的文章,用于理解IoC / DI和Castle.Windsor)...我想我应该删除此代码我的项目:
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
// Don't know what to do with the kernel, yet
}
...因为我也有这个:
public class WindsorCompositionRoot : IHttpControllerActivator
{
private readonly IWindsorContainer container;
public WindsorCompositionRoot(IWindsorContainer container)
{
this.container = container;
}
我是对的(我应该判断内核是否合适)?
显然我应该 86内核,因为上面提到的文章的示例项目有:
//#define USE_KERNEL
. . .
#if USE_KERNEL
private static void Main()
{
IKernel kernel = new DefaultKernel();
kernel.AddComponent("HttpFileDownloader", typeof(IFileDownloader), typeof(HttpFileDownloader));
kernel.AddComponent("StringParsingTitleScraper", typeof(ITitleScraper), typeof(StringParsingTitleScraper));
kernel.AddComponent("HtmlTitleRetriever", typeof(HtmlTitleRetriever));
HtmlTitleRetriever retriever = (HtmlTitleRetriever) kernel[typeof(HtmlTitleRetriever)];
Console.WriteLine(retriever.GetTitle(new Uri(ConfigurationManager.AppSettings["fileUri"])));
kernel.ReleaseComponent(retriever);
}
#else
答案 0 :(得分:1)
IKernel
足以满足ControllerFactory的需求。依靠较少的细节是一种很好的设计实践。