ASP.NET MVCでCastle.Windsorにコントローラを追加することはできません
-
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のコードを移動し、それはあなたのコントローラを見つけます。
所属していません StackOverflow