无法在ASP.NET MVC添加控制器到Castle.Windsor
-
25-09-2019 - |
题
鉴于以下设置,我有三个组件。
网络(ASP.NET MVC 3.0 RC1)
模型
的持久性(功能NHibernate,Castle.Windsor)
这是我的ControllerInstaller。
using System;
using System.Web.Mvc;
using Castle;
using Castle.Windsor;
using Castle.MicroKernel;
using Castle.MicroKernel.SubSystems;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
namespace Persistence.Installers
{
public class ControllerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
AllTypes
.FromAssembly(System.Reflection.Assembly.GetExecutingAssembly())
.BasedOn<IController>()
.Configure(c => c.Named(
c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
}
}
}
这是我的ControllerFactory ...
using System;
using System.Web;
using System.Web.Mvc;
namespace Persistence.Containers
{
/// <summary>
/// Utilize Castle.Windsor to provide Dependency Injection for the Controller Factory
/// </summary>
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly Castle.Windsor.IWindsorContainer container;
public WindsorControllerFactory()
{
container = WindsorContainerFactory.Current();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
}
这是我在Application_Start
文件global.asax
..
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
// Register the Windsor Container
ControllerBuilder.Current
.SetControllerFactory(typeof(Persistence.Containers.WindsorControllerFactory));
}
我收到错误
用于支持该服务Project.Web.Controllers.HomeController的成分,不被发现
在GetControllerInstance
。
所以,我真的不知道我在做什么错,为什么我不能得到注册的控制器。
解决方案
您温莎城堡设置代码都属于你的Web项目。这是无关的持久性。
这是造成因为你ControllerInstaller
试图用下面的代码组件注册在持久的控制器组件,而不是网络的问题:
System.Reflection.Assembly.GetExecutingAssembly()
。
因此,国际奥委会代码转移到Web项目,您会发现您的控制器。
不隶属于 StackOverflow