1

Je veux configurer mes classeurs modèles avec NHibernate:Nhibernate, MVC et ModelBinders

J'ai donc:

<object id="GigModelBinder" type="App.ModelBinders.GigModelBinder, App.Web" singleton="false" > 
<property name="VenueManager" ref="VenueManager"/> 
<property name="ArtistManager" ref="ArtistManager"/> 

J'ai un attribut qui marque les actions du contrôleur afin qu'ils utilisent classeur modèle correct ie

[AcceptVerbs("POST")] 
    public ActionResult Create([GigBinderAttribute]Gig gig) 
    { 
     GigManager.Save(gig); 
     return View(); 
    } 

Cela fonctionne très bien et mon GigModelBinder a le VenueManger correct et ArtistManager injecté

Toutefois, si dans l'application Démarrer j'ajouter:

System.Web.Mvc.ModelBinders.Binders.Add(typeof(App.Shared.DO.Gig), new GigModelBinder()); 

et dans une utilisation d'action du contrôleur:

UpdateModel<Gig>(gig); 

par exemple:

[AcceptVerbs("POST")] 
    public ActionResult Update(Guid id, FormCollection formCollection) 
    { 
     Gig gig = GigManager.GetByID(id); 

     UpdateModel<Gig>(gig); 

     GigManager.Save(gig); 
     return View(); 
    } 

Le VenueManger et ArtistManager n'ont PAS été injectés dans GigModelBinder.

Des idées que je fais mal?

Répondre

1

Dans le premier exemple, vous allez via Spring.NET pour récupérer votre objet. Cela signifie qu'il va chercher toutes les dépendances et les coller dans votre objet et tout fonctionne bien.

Dans le second exemple, vous oubliez Spring.NET tout le long et créez simplement une instance ordinaire d'une classe.

La ligne où vous enregistrez votre classeur devrait ressembler à ceci:


System.Web.Mvc.ModelBinders.Binders[typeof(App.Shared.DO.Gig)] = context.GetObject("GigModelBinder"); 

où le contexte est soit un IApplicationContext ou une instance IObjectFactory du package Spring.NET. Cordialement, Matthias.