Nhibernate, MVC и ModelBinder - PullRequest
       20

Nhibernate, MVC и ModelBinder

1 голос
/ 30 декабря 2008

Я хочу настроить связующие для моей модели с помощью Nhibernate:

Итак, у меня есть:

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

У меня есть атрибут, который помечает действия контроллера, чтобы они использовали правильную подшивку модели, т.е.

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

Это работает нормально, и в моем GigModelBinder установлены правильные VenueManger и ArtistManager

Однако, если в приложении Start добавлю:

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

и в действии контроллера используйте:

UpdateModel<Gig>(gig);

например:

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

        UpdateModel<Gig>(gig);

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

VenueManger и ArtistManager НЕ были введены в GigModelBinder.

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 31 декабря 2008

В первом примере вы используете Spring.NET для получения вашего объекта. Это означает, что он будет искать все зависимости и вставлять их в ваш объект, и все работает хорошо.

Во втором примере вы все время забываете о Spring.NET и просто создаете обычный экземпляр класса.

Строка, где вы регистрируете свою папку, должна выглядеть следующим образом:


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

где контекст - это экземпляр IApplicationContext или IObjectFactory из пакета Spring.NET.

С наилучшими пожеланиями, Matthias.

...