C#Castle Windsor注入的属性始终为null

时间:2016-06-09 16:10:21

标签: c# castle-windsor

我希望有人可以告诉我,我实施Castle Windsor有什么问题。我已经按照教程Here进行了操作。我添加了第二个安装程序,如下所示:

public class DataInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        //breakpoint on the line below is hit when the application starts. 
        container.Register(Component.For<IDataProvider>().ImplementedBy<MyDataProvider>());
    }
}

我的控制器看起来像这样:

public IDataProvider Provider { get; set; }

    public JsonResult Get()
    {
       //Provider is always null!!! 
       var data = Provider.Retrieve(a => true).ToArray();
       //convert to JSON and return.
    }

为什么我的提供者总是空?当应用程序启动时,我的第二个安装程序被点击,因为它遇到了一个断点,但是我可以告诉应用程序的其余部分只是忽略了这一点。

我的global.asax.cs的内容

protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);

        BootstrapContainer(); 
    }

    private static void BootstrapContainer()
    {
        container = new WindsorContainer().Install(FromAssembly.This());

        var controllerFactory = new WindsorControllerFactory(container.Kernel);
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);

        //container.Register(Component.For<IDataProvider>().ImplementedBy<MyDataProvider>().LifestyleSingleton()); 
    }

我尝试了这个人在question中所做的事情,但这仍然导致了同样的问题。我在这里错过了什么?

编辑:有人问我是否注册了控制器。本教程让我创建了以下类。我相信这会注册控制器吗?

public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient());
    }
}

0 个答案:

没有答案