【发布时间】:2011-09-12 11:18:39
【问题描述】:
我正在使用 Castle Windsor 3.0,在我尝试注册控制器之前,它对我来说非常有效(我使用 WCF 设施和 IoC 作为存储库/服务层)。这是我的控制器安装程序类:
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.This());
位于另一个项目中。在那里我确实调用了安装代码:
public static void InstallControllers(IWindsorInstaller install)
{
_container.Install(install);
}
似乎我做错了什么,我希望我是因为这对我来说可能是一个“永远不要再使用 awny beta”的时刻。
我得到下一个异常:没有找到支持服务 System.Web.Mvc.IController 的组件尽管我可以看到处于调试模式的控制器正在容器中注册
【问题讨论】:
-
一切都在那里,在异常消息中。看来您正在尝试将您的控制器解析为
IController而不是它的实现类 -
好吧,我要求它准确解析控制器名称中的 HomeController,而不是 IController。可能我问错了吧?
标签: c# dependency-injection castle-windsor