Внедрение зависимостей и привязка модели (ASP MVC, Autofac), когда и что использовать? - PullRequest
1 голос
/ 21 ноября 2010

Это больше похоже на концептуальный вопрос. Когда использовать привязку модели (в ASP.NET MVC Framework) и когда вводить объекты с помощью IoC (скажем, здесь Autofac)?

Один конкретный сценарий похож на, скажем, у меня есть следующий метод действия

public ActionResult EditProfile(string UserId)
{
    // get user object from repository using the the UserId
    // edit profile
    // save changes
    // return feedback
}

В приведенном выше сценарии возможно ли внедрить объект пользователя в метод действия таким образом, чтобы он автоматически получал объект пользователя с помощью идентификатора пользователя? Результирующая подпись:

public ActionResult EditProfile(UserProfile userObj) //userObj injected *somehow* to automatically retreive the object from repo using UserId ? 

Извините, если все это не имеет смысла. Я впервые использую IoC.

EDIT:

Это способ сделать это> http://buildstarted.com/2010/09/12/custom-model-binders-in-mvc-3-with-imodelbinder/

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Вы можете делать то, что вам нужно, используя фильтр пользовательских действий.Переопределив OnActionExecuting, мы получаем доступ к данным маршрута и параметрам действия действия, которое будет выполнено.Дано:

public class BindUserProfileAttribute : ActionFilterAttribute
{
  public override OnActionExecuting(FilterContext filterContext)
  {
    string id = (string)filterContext.RouteData.Values["UserId"];
    var model = new UserProfile { Id = id };

    filtextContext.ActionParameters["userObj"] = model;
  }
}

Этот атрибут позволяет нам создавать параметры, которые будут переданы в действие, поэтому мы можем загрузить пользовательский объект на этом этапе.

[BindUserProfile]
public ActionResult EditProfile(UserProfile userObj)
{

}

Вы будетевероятно, вам нужно конкретизировать ваши маршруты:

routes.MapRoute(
  "EditProfile",
  "Account/EditProfile/{UserId}",
  new { controller = "Account", action = "EditProfile" });

В MVC3 мы получаем доступ к новому интерфейсу IDepedencyResolver, который позволяет нам выполнять IoC / SL с использованием любого контейнера IoC или локатора служб, который мы хотим, поэтомувставьте сервис, подобный IUserProfileFactory, в свой фильтр, чтобы затем создать свой экземпляр UserProfile.

Надеюсь, это поможет?

0 голосов
/ 21 ноября 2010

Модель привязки используется для ваших данных. Внедрение зависимостей используется для вашей бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...