如何以编程方式注册带参数化构造函数的控制器?(在温莎城堡 - ASP.NET MVC)

Swa*_*nil 1 asp.net-mvc configuration controller castle-windsor global-asax

我想在Global.asax.cs中以编程方式注册控制器.使用MvcContrib.Castle.WindsorControllerFactory

private static IWindsorContainer _Container;

protected virtual void InitializeWindsor()
        {
            try
            {
                if (_Container == null)
                {
                    _Container = new WindsorContainer();
                    ControllerBuilder.Current.SetControllerFactory(new MvcContrib.Castle.WindsorControllerFactory(_Container));

                    RegisterActiveRecord();
                    RegisterRepositories();
                    RegisterServices();  
                    RegisterControllers();
                    RegisterComponents();
                }
Run Code Online (Sandbox Code Playgroud)

我已经做到了

 private void RegisterControllers()
        {
            try
            {
                _Container.Register(
                    AllTypes.Of<IController>()
                    .FromAssembly(typeof(HomeController).Assembly)
                    .Configure(c => c.LifeStyle.Transient)
                    );
Run Code Online (Sandbox Code Playgroud)

它适用于具有默认构造函数的所有控制器.但是,我有一个带参数化construtor的控制器(LoginController).

public class LoginController : Controller
    {
        private IUser _User;

        public LoginController(IUser objUser)
        {
            _User = objUser;
        }
Run Code Online (Sandbox Code Playgroud)

当我尝试在浏览器中查看它时(http:// localhost:2011/Login),它会给我以下错误.

**No parameterless constructor defined for this object**
Stack Trace: 
[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
   System.Activator.CreateInstance(Type type) +6
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +491

[InvalidOperationException: An error occurred when trying to create a controller of type 'NAATEELib.Controllers.LoginController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +628
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +204
Run Code Online (Sandbox Code Playgroud)

请指导我.我不想修改.config(xml)文件.谢谢.

Mau*_*fer 5

您似乎忘记使用Windsor控制器工厂(堆栈跟踪显示DefaultControllerFactory).

看看这个Windsor - ASP.NET MVC教程,特别是第2部分.

编辑:OP编辑问题,代码已经在使用MvcContrib的Windsor控制器工厂.注册错误(建议使用MvcContrib的RegisterControllers)或未正确安装控制器工厂.