Pregunta

Esto es más como una pregunta conceptual. Cuando utilizar el enlace de Modelo (en ASP.NET MVC Framework) y cuándo inyectar objetos utilizando la COI (digamos Autofac aquí)?

Un escenario específico es como digamos que, tengo el siguiente método de acción

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

En el escenario anterior, es posible inyectar un objeto de usuario a método de acción de tal manera que se pone automáticamente el objeto de usuario utilizando la identificación de usuario? El ser resultante firma:

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

Lo siento si todo no tiene sentido. `S mi primera vez usando COI.

EDIT:

Esta es la manera de hacerlo> http://buildstarted.com/2010/09/12/custom-model-binders-in-mvc-3-with-imodelbinder/

¿Fue útil?

Solución

Se puede hacer lo que es necesario el uso de un filtro de acción personalizada. Anulando OnActionExecuting, tenemos acceso a los datos de ruta, y los parámetros de acción de la acción que se ejecutará. Teniendo en cuenta:

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

Este atributo nos permite crear los parámetros que se pasarán a la acción, por lo que podemos cargar el objeto de usuario en este punto.

[BindUserProfile]
public ActionResult EditProfile(UserProfile userObj)
{

}

Usted probablemente tendrá que ser específico con sus rutas:

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

En MVC3 la que accedemos a la nueva interfaz IDepedencyResolver, lo que nos permite realizar IOC / SL utilizando cualquier COI contenedor o servicio de localización que queremos, por lo que podemos empujar un servicio como un IUserProfileFactory en el filtro, a continuación, podrá cree la instancia de UserProfile.

Espero que ayude?

Otros consejos

vinculante

modelo se utiliza para sus datos. La inyección de dependencia se utiliza para la lógica de negocio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top