我使用的是Castle Windsor 3.0,它在我尝试注册控制器(我使用WCF工具和IoC作为存储库/服务层)之前完美地工作。这里是我的控制器安装程序类:Castle Windsor 3.0和ASP.NET MVC Controllers
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
RegisterAllBasedOnWithCustomComponentRegistration(container, typeof(IController),
typeof(HomeController).Assembly,
cr => cr.LifeStyle.Transient);
}
private void RegisterAllBasedOnWithCustomComponentRegistration(IWindsorContainer container, Type baseType,
Assembly assemblyWithImplementations, Func<ComponentRegistration, ComponentRegistration<object>> customComponentRegistrationCb)
{
container.Register(
AllTypes.FromAssembly(assemblyWithImplementations)
.BasedOn(baseType)
.If(t => t.Name.EndsWith("Controller"))
.Configure(c => customComponentRegistrationCb(c)));
}
}
这里是我的控制器厂:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllerComponentName = controllerName + "Controller";
return _kernel.Resolve<IController>(controllerComponentName);
}
}
从我的Global.asax我叫下一个方法:
InversionOfControl.InstallControllers(FromAssembly 。这个());
它位于另一个项目。并在那里我做调用安装代码:
public static void InstallControllers(IWindsorInstaller install)
{
_container.Install(install);
}
好像我做错了什么,我希望我是因为它可能是一个“永远不会再使用测试版awny”那一刻我。
我得到一个异常:支持服务System.Web.Mvc.IController的成分,不被发现 altough我可以看到在调试模式控制器被注册在容器
这一切都在那里,在异常消息。看来你试图解决你的控制器为'IController'而不是它的实现类 –
嗯,我要求它正确解析controllerName中的HomeController,而不是IController。可能是我问错了,我不是吗? –