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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top