【发布时间】:2011-12-12 11:38:38
【问题描述】:
我是温莎的新手,所以
这是我的安装程序:
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(FindControllers().Configure(ConfigureControllers()));
}
private ConfigureDelegate ConfigureControllers()
{
return c => c.LifeStyle.Transient;
}
private BasedOnDescriptor FindControllers()
{
return AllTypes.FromThisAssembly()
.BasedOn<IController>()
.If(Component.IsInSameNamespaceAs<HomeController>())
.If(t => t.Name.EndsWith("Controller"));
}
}
和工厂:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
try
{
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);
}
catch(Exception ex)
{
return null;
}
}
}
从 Controller 继承的所有控制器都被很好地解析。但是当我尝试实例化这样的东西时:
public class ArticleController : RestController<Article>
{
protected override JsonResult Create(Article item)
{
...
}
}
RestController 也继承自 Controller
它抛出 IControllerFactory 'TheStorage.Web.Factories.WindsorControllerFactory' 没有返回名称为 'Article' 的控制器
我做错了什么?
【问题讨论】:
-
您是否尝试过为 FindControllers 使用 BasedOn
?
标签: model-view-controller inversion-of-control castle-windsor ioc-container