ASP.NET MVCでCastle.Windsorにコントローラを追加することはできません

StackOverflow https://stackoverflow.com/questions/4404261

  •  25-09-2019
  •  | 
  •  

質問

次の設定を考えると、私は3つのアセンブリを持っています。

  

のWeb(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は、次のコードでアセンブリ持続性のコントローラアセンブリではなく、Webを登録しようとしているため、問題を引き起こしています

System.Reflection.Assembly.GetExecutingAssembly()ます。

だから、WebプロジェクトへのIoCのコードを移動し、それはあなたのコントローラを見つけます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top