Frage

Das ist eher wie eine konzeptionelle Frage. Wann verwendet Modell Bindung (in ASP.NET MVC Framework) und, wenn Objekte mit IoC zu injizieren (sagen wir mal Autofac hier)?

Ein spezielles Szenario ist wie sagen wir mal, ich habe die folgende Aktion-Methode

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

Im obigen Szenario ist es möglich, ein Benutzerobjekt zu Aktionsmethode zu injizieren, so dass sie automatisch das Benutzerobjekt erhalten den Benutzer-ID verwenden? Die sich ergebende Signatur Wesen:

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

Sorry, wenn es nicht der Fall ist sinnvoll. It`s mein erstes Mal mit IoC.

EDIT:

Dies ist der Weg, um es> http://buildstarted.com/2010/09/12/custom-model-binders-in-mvc-3-with-imodelbinder/

War es hilfreich?

Lösung

Sie können tun, was Sie eine benutzerdefinierte Aktion Filter verwenden müssen. Durch das Überschreiben OnActionExecuting, haben wir Zugriff auf die Routendaten und die Aktionsparameter der Aktion, die ausgeführt werden. Gegeben:

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;
  }
}

Dieses Attribut ermöglicht es uns, um die Parameter zu erstellen, die in die Aktion übergeben werden, so dass wir das Benutzerobjekt an dieser Stelle laden können.

[BindUserProfile]
public ActionResult EditProfile(UserProfile userObj)
{

}

Sie werden wahrscheinlich brauchen spezifische mit Ihren Routen zu bekommen:

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

In MVC3 erhalten wir Zugriff auf die neue IDepedencyResolver-Schnittstelle, die uns IoC / SL verwenden Sie das IoC-Container oder Service Locator wollen wir ausführen können, so dass wir einen Service wie ein IUserProfileFactory in Ihren Filter drücken kann, um dann in der Lage sein, erstellen Sie Ihre UserProfile Instanz.

Ich hoffe, das hilft?

Andere Tipps

Modell Bindung für Ihre Daten verwendet. Dependency Injection für Ihre Geschäftslogik verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top