1

IOC を使用してコントローラー インスタンスを構築するために、実際に StructureMAP ObjectFactory を使用している CustomControllerFactory を使用して、DefaultControllerFactory をオーバーライドしました。しかし、Controller インスタンスを見つけられず、それをフェイルオーバーする方法がいくつかあります。ノート。私はすでに Global.asax にも DEFaultControllerFactory を設定しています。レジストリを SM に登録する以外に、何かしなければならないことはありますか。

コントローラーを登録すると問題が解決することは理解していますが、defaultFactoryのようにコントローラーを自動的に検出できないのはなぜですか?

4

2 に答える 2

3

コントローラファクトリは次のようになります。

public class ControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType != null)
        {
            return (IController)ObjectFactory.GetInstance(controllerType);
        }
        return null;
    }
}

StructureMap構成ドキュメント:

public class DependencyRegistry : Registry
{
    protected override void configure()
    {
        Scan(x =>
                 {
                     x.Assembly("MyApp.Web");
                     x.Assembly("MyApp.Model");
                     x.Assembly("MyApp.DataAccess");
                     x.With<DefaultConventionScanner>();
                 });
        base.configure();
    }

}

デフォルトの規則を使用してStructureMapを構成する関数:

public void RegisterDependencies()
    {
        ObjectFactory.Initialize(InitializeStructureMap);
    }

    private void InitializeStructureMap(IInitializationExpression x)
    {
        x.AddRegistry<DependencyRegistry>();
    }

コントローラの例:

public class MyController : Controller
{
    private IMyRepository _repository;

    public MyController (IRepository repository)
    {
        _repository = repository;
    }
}

RegisterDependencies()関数を呼び出すことを忘れないでください...

これがお役に立てば幸いです。

于 2009-04-09T12:32:58.577 に答える
0

コントローラをストラクチャマップに登録しましたか? (大文字と小文字が区別されます)

于 2009-04-08T17:20:20.080 に答える