【发布时间】:2014-02-17 17:29:21
【问题描述】:
有没有人有任何示例代码可以让 Umbraco MVC 与 Castle Windsor 依赖注入框架一起工作?我遇到的问题是让我的表面控制器使用可注入的参数化构造函数。我知道我做错了什么,但不确定是什么。
我在这里遵循了(非 Umbraco)教程 - http://docs.castleproject.org/Windsor.Windsor-tutorial-part-four-putting-it-all-together.ashx - 这基本上意味着在 App_Start 上我正在运行此代码:
var container = new WindsorContainer().Install(FromAssembly.This());
var controllerFactory = new MyCustomControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
MyCustomControllerFactory 的代码如下。
另外,我对IWindsorInstaller 的实现包含以下内容:
container.Register(Classes.FromThisAssembly()
.BasedOn<SurfaceController>()
.LifestyleTransient());
我得到的异常是“找不到支持服务 Umbraco.Web.Mvc.RenderMvcController 的组件”,当我使用参数化构造函数调用表面控制器时,由下面的 GetControllerInstance 方法抛出:
public class TestSurfaceController : SurfaceController
{
public TestSurfaceController(INameService nameService)
{
....
}
}
如果有人有一些有效的示例代码,我将不胜感激。我之前已经将 Ninject 与 Umbraco 连接起来没有任何问题,但在这个项目中,我与 Castle Windsor 相关联,而且进展不快!提前致谢。
MyCustomControllerFactory.cs:
public class MyCustomControllerFactory : DefaultControllerFactory
{
private readonly IKernel kernel;
public FastStartControllerFactory(IKernel kernel)
{
this.kernel = kernel;
}
public override void ReleaseController(IController controller)
{
kernel.ReleaseComponent(controller);
}
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));
}
return (IController)kernel.Resolve(controllerType);
}
}
【问题讨论】:
标签: c# asp.net-mvc castle-windsor umbraco