私はCastle Windsor 3.0を使用しています。コントローラー(私はWCF機能とIoCをリポジトリー/サービス層に使用しました)を登録しようとするまで、完璧に機能しました。ここに私のコントローラのインストーラクラスは次のとおりです。城ウィンザー3.0とASP.NET MVCコントローラー
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
RegisterAllBasedOnWithCustomComponentRegistration(container, typeof(IController),
typeof(HomeController).Assembly,
cr => cr.LifeStyle.Transient);
}
private void RegisterAllBasedOnWithCustomComponentRegistration(IWindsorContainer container, Type baseType,
Assembly assemblyWithImplementations, Func<ComponentRegistration, ComponentRegistration<object>> customComponentRegistrationCb)
{
container.Register(
AllTypes.FromAssembly(assemblyWithImplementations)
.BasedOn(baseType)
.If(t => t.Name.EndsWith("Controller"))
.Configure(c => customComponentRegistrationCb(c)));
}
}
そして、ここでは私のコントローラの工場です:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllerComponentName = controllerName + "Controller";
return _kernel.Resolve<IController>(controllerComponentName);
}
}
私のGlobal.asaxから、私は次のメソッドを呼び出します。FromAssembly
InversionOfControl.InstallControllers( 。この());
これは別のプロジェクトにあります。そして、そこに私がインストールコードを呼び出す操作を行います。私は何か間違ったことをやっているよう
public static void InstallControllers(IWindsorInstaller install)
{
_container.Install(install);
}
それはそうと、私はそれが私のために、「もう一度awnyベータ版を使用することはありません」一瞬かもしれないので、私は願っています。
私は次の例外を取得:、私はあなたのControllerFactoryでコンテナ
。実装クラスではなくコントローラをIControllerとして解決しようとしているようです。 –
IControllerではなく、controllerNameのHomeControllerを正確に解決するよう求めています。私は間違ってそれを求めているかもしれない、私ではない? –