Nhibernate, MVC и ModelBinders
-
03-07-2019 - |
Вопрос
Я хочу настроить привязки моей модели с помощью 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.
Однако если в Пуск приложения добавляю:
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.
Есть идеи, что я делаю неправильно?
Решение
В первом примере вы используете Spring.NET для получения объекта.Это означает, что он найдет все зависимости и вставит их в ваш объект, и все будет работать хорошо.
Во втором примере вы вообще забываете о Spring.NET и просто создаете обычный экземпляр класса.
Строка, в которой вы регистрируете связующее, должна выглядеть так:
System.Web.Mvc.ModelBinders.Binders[typeof(App.Shared.DO.Gig)] = context.GetObject("GigModelBinder");
где контекст — это либо IApplicationContext, либо экземпляр IObjectFactory из пакета Spring.NET.
С уважением, Матиас.