10

依存性注入に StructureMap を使用するプロジェクトがあります。プロジェクトは MVC プロジェクトとして正常にコンパイルされますが、すべてを MVC2 プロジェクトに移動した後、次のエラーが発生します。

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type)': C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web をオーバーライドする適切なメソッドが見つかりません

ここに私の StructureMapControllerFactory があります:

using System;
using System.Web.Mvc;
using StructureMap;

namespace Test.Web.Controllers
{
    public class StructureMapControllerFactory : DefaultControllerFactory
    {

        protected override IController GetControllerInstance(Type controllerType)**
        {

            IController result = null;
            try
            {
                if (controllerType == null) return base.GetControllerInstance(controllerType);
                result = ObjectFactory.GetInstance(controllerType) as Controller;

            }
            catch (StructureMapException)
            {
                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }

            return result;
        }

    }
}

この問題に半関連する投稿を 1 つ見つけましたが、問題を解決する方法についての洞察は得られませんでした: MVC 2 プレビュー 1 - コントローラー内のパラメーターを持つメソッドの読み込みに失敗しました

明らかに、1.0 から 2.0 への進行からの変更を見逃しているに違いありませんが、何が変更されたのかはわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

19

このメソッドのシグネチャが変更されました。RequestContext の最初の引数が追加されました。

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType)

また、base.GetControllerInstance への呼び出しを変更する必要があります。

if (controllerType == null) 
    return base.GetControllerInstance(requestContext, controllerType);
于 2009-09-01T20:07:41.397 に答える
8

Craig Stuntz はここで非常に正しいです。

DI が MVC アプリとは異なるプロジェクトにある場合は、System.Web.Routing を参照することを忘れないでください。

何らかの理由で、IDE にエラーが表示されませんでしたが、コンパイル時に GetControllerInstance の「オーバーライドする適切なメソッドが見つかりません」が表示されます。

System.Web.Routing の欠落している参照アセンブリを修正すると、すべてがうまくいきました...

于 2010-05-03T07:16:48.427 に答える
1

Reflector でトレースしたところ、実際に関数シグネチャが変更されています。の

保護された内部仮想 IController GetControllerInstance(RequestContext requestContext, Type controllerType)

MVC 2 dll は次の場所にあります: C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

ありがとう、それは私の問題を解決しました!

于 2009-10-14T11:03:16.537 に答える