我希望有人可以告诉我,我实施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());
}
}