鉴于以下设置,我有三个组件。

  

网络(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项目,您会发现您的控制器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top