2009-04-08 7 views
1

J'ai remplacé le DefaultControllerFactory en utilisant CustomControllerFactory qui utilise effectivement StructureMAp ObjectFactory pour construire l'instance de contrôleur en utilisant IOC. Mais certains comment il ne peut pas trouver les instances du contrôleur et échouant dessus. Remarque. J'ai déjà défini DEfaultControllerFactory dans Global.asax. Donc, il y a autre chose que je dois faire, sauf enregistrer mon registre auprès du SM.StructureMap avec ASP.NET MVC - la méthode configure() est obsolète?

Je comprends l'enregistrement des contrôleurs résoudre les problèmes, mais je me demande pourquoi ne pas détecter le contrôleur automatiquement comme defaultFactory fait?

Répondre

3

Ce à quoi ressemble l'usine contrôleur:

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

document de configuration 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(); 
    } 

} 

Fonction qui configure StructureMap, en utilisant les conventions par défaut:

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

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

Exemple de contrôleur:

public class MyController : Controller 
{ 
    private IMyRepository _repository; 

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

À ne pas oublier d'appeler la fonction RegisterDependencies() ...

J'espère que cela aide. Considérons que le remplacement de la méthode de configuration est obsolète.

+2

voir https://structuremap.svn.sourceforge.net/svnroot/structuremap/trunk/Source/StructureMap/Configuration/DSL/Registry.cs – Sebastian

+0

Merci pour l'édition. J'ai extrait ce petit motif du projet CodeCampServer. Peut-être devriez-vous en informer les auteurs? –

+0

+1: un commentaire vraiment précieux Sebastian. – boj

0

Avez-vous enregistré les contrôleurs dans structuremap? (égard, il est sensible à la casse)

Questions connexes