Nhibernate, MVC e ModelBinders
-
03-07-2019 - |
Domanda
Voglio configurare i miei raccoglitori di modelli con Nhibernate:
Quindi ho:
<object id="GigModelBinder" type="App.ModelBinders.GigModelBinder, App.Web" singleton="false" >
<property name="VenueManager" ref="VenueManager"/>
<property name="ArtistManager" ref="ArtistManager"/>
Ho un attributo che contrassegna le azioni del controller in modo che utilizzino il raccoglitore di modello corretto, ad esempio
[AcceptVerbs("POST")]
public ActionResult Create([GigBinderAttribute]Gig gig)
{
GigManager.Save(gig);
return View();
}
Funziona bene e il mio GigModelBinder ha iniettato VenueManger e ArtistManager corretti
Tuttavia se nell'applicazione Start aggiungo:
System.Web.Mvc.ModelBinders.Binders.Add(typeof(App.Shared.DO.Gig), new GigModelBinder());
e in un'azione del controller usare:
UpdateModel<Gig>(gig);
ad esempio:
[AcceptVerbs("POST")]
public ActionResult Update(Guid id, FormCollection formCollection)
{
Gig gig = GigManager.GetByID(id);
UpdateModel<Gig>(gig);
GigManager.Save(gig);
return View();
}
VenueManger e ArtistManager NON sono stati iniettati in GigModelBinder.
Qualche idea su cosa sto facendo di sbagliato?
Soluzione
Nel primo esempio vai su Spring.NET per recuperare il tuo oggetto. Ciò significa che cercherà tutte le dipendenze, le inserirà nel tuo oggetto e tutto funzionerà bene.
Nel secondo esempio ti dimentichi sempre di Spring.NET e crei semplicemente un'istanza ordinaria di una classe.
La riga in cui registri il tuo raccoglitore dovrebbe apparire così:
System.Web.Mvc.ModelBinders.Binders[typeof(App.Shared.DO.Gig)] = context.GetObject("GigModelBinder");
dove il contesto è un'istanza IApplicationContext o IObjectFactory dal pacchetto Spring.NET.
Cordiali saluti, Mattia.