gpt4 book ai didi

c# - CaSTLe windsor 3.0 和 ASP.NET MVC Controller

转载 作者:太空狗 更新时间:2023-10-30 00:21:06 24 4
gpt4 key购买 nike

我使用的是 CaSTLe Windsor 3.0,在我尝试注册 Controller 之前,它对我来说效果很好(我使用 WCF 工具和 IoC 作为存储库/服务层)。这是我的 Controller 安装程序类:

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)));
}
}

这是我的 Controller 工厂:

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 的组件尽管我可以看到处于 Debug模式的 Controller 正在容器中注册

最佳答案

在您的 ControllerFactory 中,您不应该 Resolve IController 而是具体的 Controller 类型。这是我经常使用的典型的基于 Windsor 的 ControllerFactory:

public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IWindsorContainer _container;

public WindsorControllerFactory(IWindsorContainer container)
{
_container = container;
}

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return (IController)_container.Resolve(controllerType);
}

public override void ReleaseController(IController controller)
{
_container.Release(controller);
}
}

关于c# - CaSTLe windsor 3.0 和 ASP.NET MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com