为什么使用windsor Castle的代码不起作用?

时间:2012-06-08 13:20:08

标签: asp.net-mvc model-view-controller castle-windsor ioc-container

我有一个MVC应用程序,它在任何地方使用Windsor,它在Windsor Castle的任何地方都可以正常工作,但现在我在其中添加了一个新代码并且它无法正常工作。 我使用以下代码配置Castle:

   public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<IFileUploadService>().ImplementedBy<FileUploadService>().DependsOn(Parameter.ForKey("x").Eq(
            "test")).LifeStyle.PerWebRequest);
    }

FileUploadService定义如下:

  public class FileUploadService : IFileUploadService
{



            public FileUploadService(string x)
    {
      // use x        
    }
 }

我确信安装程序行正在调用(Debug显示该行在应用程序启动时运行。

我有一个控制器,定义如下:

   public FileUploadController(IConfiguration Configuration, IFileUploadService fileUploadService)
    {
        this.Configuration = Configuration;
        this.fileUploadService = fileUploadService;
    }

当我运行此应用程序时,我收到此错误:

   Can't create component 'FileUploadService' as it has dependencies to be satisfied. 
   FileUploadService is waiting for the following dependencies: 

    Keys (components with specific keys)
    - x which was not registered.

有什么问题?我有类似的代码,他们正在工作。

1 个答案:

答案 0 :(得分:1)

我发现了问题: 上面的代码适用于Windsor 3.x,但我的应用程序使用2.5。 在2.5版中执行此操作的正确方法如下:

  container.Register(Component.For<IFileUploadService>().ImplementedBy<FileUploadService>().Parameters(Parameter.ForKey("x").Eq(
        "test")).LifeStyle.PerWebRequest);