【发布时间】:2015-05-25 13:34:18
【问题描述】:
按照 Windsor 的标准 MVC 5 教程,我创建了一个 WindsorControllerFactory :
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
if (controllerType != null && kernel.HasComponent(controllerType))
return (IController)kernel.Resolve(controllerType);
return base.GetControllerInstance(requestContext, controllerType);
}
我也想开始使用BetterCMS,并且我已经获得了正确的 Nuget 包并尝试在Global.asax 中对其进行初始化:
__CmsHost = CmsContext.RegisterHost();
调用之后,当我检查我的ControllerBuilder.Current.GetDefaultControllerFactory() 时,我有适合BetterCMS 的工厂。
但是要使用Windsor,我需要注册自己的控制器工厂:
var controllerFactory = new WindsorControllerFactory(__Container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
当然,现在当我尝试访问 BetterCMS 控制器时出现错误 - 它无法识别它需要构建的控制器。
我已经尝试限制容器注册控制器的命名空间,但这并没有改变结果:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes.FromThisAssembly()
.InNamespace("MyNamespace.Net.Web.Platform.Controllers", true)
.LifestyleTransient());
}
我的意思是,微软的SetControllerFactory 不会尊重我的 Windsor 容器。
没有用我自己的来组合 BetterCMS 工厂来创建工厂,我该怎么做才能让这两者发挥得很好?
【问题讨论】:
-
有什么异常?
标签: c# asp.net-mvc castle-windsor ioc-container bettercms