Inyección de dependencias y modelo de unión (ASP MVC, Autofac), Cuándo utilizar qué?
-
27-09-2019 - |
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/
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
modelo se utiliza para sus datos. La inyección de dependencia se utiliza para la lógica de negocio.