C# 404-翁布拉科+;温莎城堡
使用Umbraco 7.1.8和Castle Windsor 3.3.0在每次请求时获得404。对使用Umbraco相当陌生,还没有为IoC设置它,但是温莎对我来说并不陌生 控制器本身似乎是从容器中解析的,并且容器本身注册了正确的(非umbraco)控制器 我错过了什么?谁能给我指一下正确的方向吗 干杯C# 404-翁布拉科+;温莎城堡,c#,umbraco,castle-windsor,C#,Umbraco,Castle Windsor,使用Umbraco 7.1.8和Castle Windsor 3.3.0在每次请求时获得404。对使用Umbraco相当陌生,还没有为IoC设置它,但是温莎对我来说并不陌生 控制器本身似乎是从容器中解析的,并且容器本身注册了正确的(非umbraco)控制器 我错过了什么?谁能给我指一下正确的方向吗 干杯 public class Global : UmbracoApplication { private static IWindsorContainer container;
public class Global : UmbracoApplication
{
private static IWindsorContainer container;
protected override void OnApplicationStarting(object sender, EventArgs e)
{
base.OnApplicationStarting(sender, e);
container = new WindsorContainer().Install(FromAssembly.This());
UmbracoFilteredControllerFactory.Kernel = container.Kernel;
FilteredControllerFactoriesResolver.Current.InsertType<UmbracoFilteredControllerFactory>(0);
}
过滤工厂
public class UmbracoFilteredControllerFactory : WindsorControllerFactory, IFilteredControllerFactory
{
private static IKernel _kernel;
public UmbracoFilteredControllerFactory()
: base(_kernel)
{
}
public static IKernel Kernel
{
get
{
if (_kernel == null)
{
throw new ArgumentNullException("Set Kernel in WindsorControllerFactory.");
}
return _kernel;
}
set
{
_kernel = value;
}
}
public bool CanHandle(RequestContext request)
{
var controllerType = GetControllerType(request, request.RouteData.Values["controller"].ToString());
return Kernel.HasComponent(controllerType);
}
}
谷歌透露了这一点,希望能有所帮助:@sebastiaan谢谢,我之前看到过,不幸的是——到目前为止,我还无法得到这个球。使用Ninject实现了类似的功能,并且只使用了依赖项解析器——正如答案所暗示的那样——但是如果可能的话,我宁愿使用ControllerFactory。
public class UmbracoFilteredControllerFactory : WindsorControllerFactory, IFilteredControllerFactory
{
private static IKernel _kernel;
public UmbracoFilteredControllerFactory()
: base(_kernel)
{
}
public static IKernel Kernel
{
get
{
if (_kernel == null)
{
throw new ArgumentNullException("Set Kernel in WindsorControllerFactory.");
}
return _kernel;
}
set
{
_kernel = value;
}
}
public bool CanHandle(RequestContext request)
{
var controllerType = GetControllerType(request, request.RouteData.Values["controller"].ToString());
return Kernel.HasComponent(controllerType);
}
}