SlideShare una empresa de Scribd logo
1 de 27
Contenedores de IoC
Autofac
Santiago Porras Rodríguez
UX Developer
SolidQ
http://geeks.ms/blogs/santypr
@saintwukong
Inversión de Control IoC
Inversión de control
Problemas en el uso de programación tradicional en capas
 Para reemplazar o actualizar las dependencias es necesario cambiar las
clases.
 Las implementaciones específicas de las dependencias tienen que estar
disponibles en tiempo de compilación.
 Las clases son dificilmente testeables en un espacio aislado porque tienen
referencias directas. Esto significa que esas dependencias no pueden ser
reemplazadas por “Mocks”.
 Las clases contienen código repetitive para tareas de CRUD y administración
de sus dependencias.
Inversión de control
Definición
Es un patrón de programación, basado en el principio de Hollywood, en el que el
flujo de ejecución de un programa se invierte respecto a los métodos de
programación tradicionales, en los que la interacción se expresa de forma
imperativa haciendo llamadas a procedimientos (procedure calls) o funciones.
Su diseño está pensado para permitir un menor acoplamiento entre componentes
de una aplicación y fomentar así la reutilización de los mismos y el testeo en
espacios aislados, haciendo uso para ello de Interfaces.
Inversión de control
Inversión de control
Beneficios de su uso
 Desacoplamiento de las clases de sus dependencias, con lo que de esta forma,
éstas podrán ser actualizadas o reemplazadas minimizando los cambios del
código.
 Poder escribir clases que dependan de otras cuya implementación esppecífica
se desconoce en tiempo de compilación
 Testear las clases en un espacio aislado sin hacer uso de sus dependencias.
 Liberación de las clases de la tarea de ser responsables de la localización y la
administración del ciclo de vida de las dependencias.
Inversión de control
Autofac
Inyección de
dependencias DI
Inyección de dependencias
Definición
Es un patrón de diseño orientado a objetos, en el que se suministran objetos
(Inyección) a una clase en lugar de ser la propia clase quien cree el objeto. El
término fue acuñado por primera vez por Martin Fowler.
Inyección de dependencias
 No se instancian las dependencias de forma explícita. En vez de eso, se
realiza una declaración de las dependencias en la definición de la clase que,
por medio de un objeto constructor “Builder” se resuelven inyectando la
instancia específica en el momento de la instanciación de la clase que
contiene la dependencia.
Inyección de dependencias
Autofac
Autofac
Definición
Es un contenedor de IoC para .NET que se encarga de administrar las dependencias
entre clases de forma que la aplicación sea fácilmente actualizable y por tanto,
escalable en tamaño y complejidad.
Enlaces a documentación
http://autofac.org/
https://code.google.com/p/autofac/
NUGET
http://nuget.org/packages/Autofac/
Autofac
 Uso del contenedor
 Registro de Componentes de forma individual
 Registro de todos los Componentes de un ensamblado
 Crear el contenedor
 Obtener una instancia del contenedor
 Registro de Interfaces con su implementación
var builder = new ContainerBuilder();
builder.Register(c => new TaskController(c.Resolve<ITaskRepository>()));
builder.RegisterType<TaskController>();
builder.RegisterInstance(new TaskController());
builder.RegisterAssemblyTypes(controllerAssembly);
var container = builder.Build();
var taskController = container.Resolve<TaskController>();
builder.RegisterType<TaskController>().As<IController>();
// enabling
var taskController = container.Resolve<IController>();
Autofac
 Expresar las dependencias
 Cuando hay más de una dependencia
 Parámetro por defecto para las dependencias
 Dependencias circulares
public class TaskController : IController
{
public TaskController(ITaskRepository tasks) { ... }
}
public TaskController(ITaskRepository tasks)
public TaskController(ITaskRepository tasks, ILog log)
public TaskController(ITaskRepository tasks, ILog log = null)
public TaskController(Lazy<ITaskRepository> tasks)
Autofac para MVC
Autofac para MVC
El módulo de Autofac para MVC disponible también en NUGET nos permite realizar
operaciones habituales como el registro de los Controllers, los Model Binders, etc… de
forma automatizada
 Registro de los Controladores
 Registro de los Model Binders
 Inyección de abstracciones HTTP
 Inyección de Dependencias en Vistas
 Inyección de Propiedades en FilterAttributes
NUGET
http://nuget.org/packages/Autofac.Mvc4/
Autofac para MVC
 Registro de dependencias y del “resolvedor” de dependencias
 Registro de los controladores manualmente
 Registro de los controladores de un proyecto entero
 Registro del “resolvedor” de dependencias
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// Other MVC setup...
var builder = new ContainerBuilder();
builder.RegisterType<HomeController>().InstancePerHttpRequest();
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Autofac para MVC
 Registro de Model Binders
 Inyección de HTTP Abstractions
 Registro de los controladores de un proyecto entero
var builder = new ContainerBuilder();
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterModelBinderProvider();
[ModelBinderType(typeof(string))]
public class StringBinder : IModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//do implementation here
}
}
builder.RegisterModule(new AutofacWebTypesModule());
Autofac para MVC
 Inyectar dependencias en las vistas
builder.RegisterSource(new ViewRegistrationSource());
public abstract class CustomViewPage : WebViewPage
{
public IDependency Dependency { get; set; }
}
public abstract class CustomViewPage : ViewPage
{
public IDependency Dependency { get; set; }
}
@inherits Example.Views.Shared.CustomViewPage
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Example.Views.Shared.CustomViewPage"%>
Autofac para MVC
 Inyectar Properties en FilterAttributes
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.Register(c => new Logger()).As<ILogger>().InstancePerHttpRequest();
builder.RegisterFilterProvider();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
public class CustomActionFilter : ActionFilterAttribute
{
public ILogger Logger { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logger.Log("OnActionExecuting");
}
}
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public ILogger Logger { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
Logger.Log("AuthorizeCore");
return true;
}
}
[CustomActionFilter]
[CustomAuthorizeAttribute]
public ActionResult Index()
{
// ...
}
Comparativa de
contenedores de IoC
Comparativa de rendimiento
http://www.iocbattle.com/
Comparativa de rendimiento
http://www.iocbattle.com/
Q&A
Santiago Porras
Rodríguez
UX Developer
santypr@gmail.com
http://geeks.ms/blogs/santypr
saintwukong
Gracias por su atención

Más contenido relacionado

La actualidad más candente

Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
Antonio Palomares Sender
 
java,conceptos basicos
java,conceptos basicosjava,conceptos basicos
java,conceptos basicos
Mariano Galvez
 

La actualidad más candente (14)

Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
 
Introduccion a Java
Introduccion a JavaIntroduccion a Java
Introduccion a Java
 
CDI para Java EE 7
CDI para Java EE 7CDI para Java EE 7
CDI para Java EE 7
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Net capitulo I - fundamentos
Net   capitulo I - fundamentosNet   capitulo I - fundamentos
Net capitulo I - fundamentos
 
Programacion_II_introduccion_GUI
Programacion_II_introduccion_GUIProgramacion_II_introduccion_GUI
Programacion_II_introduccion_GUI
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Curso Java Avanzado 0 Conceptos Basicos
Curso Java Avanzado   0 Conceptos BasicosCurso Java Avanzado   0 Conceptos Basicos
Curso Java Avanzado 0 Conceptos Basicos
 
Lenguajes de programacion rivas maldonado
Lenguajes de programacion  rivas maldonadoLenguajes de programacion  rivas maldonado
Lenguajes de programacion rivas maldonado
 
java,conceptos basicos
java,conceptos basicosjava,conceptos basicos
java,conceptos basicos
 
investigacion topicos avanzados de programacion unidad dos interfaz grafica
investigacion topicos avanzados de programacion unidad dos interfaz graficainvestigacion topicos avanzados de programacion unidad dos interfaz grafica
investigacion topicos avanzados de programacion unidad dos interfaz grafica
 
UDA-Guia de desarrollo
UDA-Guia de desarrolloUDA-Guia de desarrollo
UDA-Guia de desarrollo
 

Similar a Contenedores de IoC - Autofac

Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
sena
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
kaolong
 

Similar a Contenedores de IoC - Autofac (20)

Msdn Webcast InyeccióN De Dependencias Con Spring Framework
Msdn Webcast   InyeccióN De Dependencias Con Spring FrameworkMsdn Webcast   InyeccióN De Dependencias Con Spring Framework
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
 
[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)
[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)
[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)
 
MVC
MVCMVC
MVC
 
Framework
FrameworkFramework
Framework
 
Frameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITESFrameworks MVC para desarrollo de UITES
Frameworks MVC para desarrollo de UITES
 
Micrcoservicios con Asp Net Core y AKS
Micrcoservicios con Asp Net Core y AKSMicrcoservicios con Asp Net Core y AKS
Micrcoservicios con Asp Net Core y AKS
 
Mvc4 Intro
Mvc4 IntroMvc4 Intro
Mvc4 Intro
 
Lab3 cristian gastelbondo
Lab3 cristian gastelbondoLab3 cristian gastelbondo
Lab3 cristian gastelbondo
 
MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
 
Patrones j2 ee
Patrones j2 eePatrones j2 ee
Patrones j2 ee
 
Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
 
Diapositivas Spring Framework- Javier Oliver Fulguera
Diapositivas Spring Framework-  Javier Oliver FulgueraDiapositivas Spring Framework-  Javier Oliver Fulguera
Diapositivas Spring Framework- Javier Oliver Fulguera
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Abstract factory. presentación
Abstract factory. presentaciónAbstract factory. presentación
Abstract factory. presentación
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
CakePHP
CakePHPCakePHP
CakePHP
 
Presentación1
Presentación1Presentación1
Presentación1
 

Más de Santiago Porras Rodríguez

Más de Santiago Porras Rodríguez (14)

Cerberus - NetCoreConf BCN 2020
Cerberus - NetCoreConf BCN 2020  Cerberus - NetCoreConf BCN 2020
Cerberus - NetCoreConf BCN 2020
 
Modern Branding en SharePoint
Modern Branding en SharePointModern Branding en SharePoint
Modern Branding en SharePoint
 
Talks4Kids - Mobile branding
Talks4Kids - Mobile brandingTalks4Kids - Mobile branding
Talks4Kids - Mobile branding
 
Codemotion - Modern Branding en SharePoint desde todos los ángulos
Codemotion - Modern Branding en SharePoint desde todos los ángulosCodemotion - Modern Branding en SharePoint desde todos los ángulos
Codemotion - Modern Branding en SharePoint desde todos los ángulos
 
Creatividad en la visualización de contenidos en SharePoint con JS Link y Dis...
Creatividad en la visualización de contenidos en SharePoint con JS Link y Dis...Creatividad en la visualización de contenidos en SharePoint con JS Link y Dis...
Creatividad en la visualización de contenidos en SharePoint con JS Link y Dis...
 
El futuro del desarrollo web con asp.net y visual studio
El futuro del desarrollo web con asp.net y visual studioEl futuro del desarrollo web con asp.net y visual studio
El futuro del desarrollo web con asp.net y visual studio
 
Modern Branding en SharePoint desde todos los ángulos con HTML5 y Responsive ...
Modern Branding en SharePoint desde todos los ángulos con HTML5 y Responsive ...Modern Branding en SharePoint desde todos los ángulos con HTML5 y Responsive ...
Modern Branding en SharePoint desde todos los ángulos con HTML5 y Responsive ...
 
Universal apps tips and tricks
Universal apps   tips and tricksUniversal apps   tips and tricks
Universal apps tips and tricks
 
Introducción a vnext
Introducción a vnextIntroducción a vnext
Introducción a vnext
 
Diseño de aplicaciones móviles - Conceptos, tips & tricks
Diseño de aplicaciones móviles - Conceptos, tips & tricksDiseño de aplicaciones móviles - Conceptos, tips & tricks
Diseño de aplicaciones móviles - Conceptos, tips & tricks
 
Responsive Web Design con superpoderes
Responsive Web Design con superpoderesResponsive Web Design con superpoderes
Responsive Web Design con superpoderes
 
Windows phone 8 introducción al diseño
Windows phone 8   introducción al diseñoWindows phone 8   introducción al diseño
Windows phone 8 introducción al diseño
 
Branding en SharePoint 2013 aplicando HTML5 y Responsive Design
Branding en SharePoint 2013 aplicando HTML5 y Responsive DesignBranding en SharePoint 2013 aplicando HTML5 y Responsive Design
Branding en SharePoint 2013 aplicando HTML5 y Responsive Design
 
Windows Phone 8 - be modern be cool
Windows Phone 8 - be modern be coolWindows Phone 8 - be modern be cool
Windows Phone 8 - be modern be cool
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
10°8 - Avances tecnologicos del siglo XXI
10°8 - Avances tecnologicos del siglo XXI10°8 - Avances tecnologicos del siglo XXI
10°8 - Avances tecnologicos del siglo XXI
 

Contenedores de IoC - Autofac

  • 2. Santiago Porras Rodríguez UX Developer SolidQ http://geeks.ms/blogs/santypr @saintwukong
  • 4. Inversión de control Problemas en el uso de programación tradicional en capas  Para reemplazar o actualizar las dependencias es necesario cambiar las clases.  Las implementaciones específicas de las dependencias tienen que estar disponibles en tiempo de compilación.  Las clases son dificilmente testeables en un espacio aislado porque tienen referencias directas. Esto significa que esas dependencias no pueden ser reemplazadas por “Mocks”.  Las clases contienen código repetitive para tareas de CRUD y administración de sus dependencias.
  • 5. Inversión de control Definición Es un patrón de programación, basado en el principio de Hollywood, en el que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales, en los que la interacción se expresa de forma imperativa haciendo llamadas a procedimientos (procedure calls) o funciones. Su diseño está pensado para permitir un menor acoplamiento entre componentes de una aplicación y fomentar así la reutilización de los mismos y el testeo en espacios aislados, haciendo uso para ello de Interfaces.
  • 7. Inversión de control Beneficios de su uso  Desacoplamiento de las clases de sus dependencias, con lo que de esta forma, éstas podrán ser actualizadas o reemplazadas minimizando los cambios del código.  Poder escribir clases que dependan de otras cuya implementación esppecífica se desconoce en tiempo de compilación  Testear las clases en un espacio aislado sin hacer uso de sus dependencias.  Liberación de las clases de la tarea de ser responsables de la localización y la administración del ciclo de vida de las dependencias.
  • 10. Inyección de dependencias Definición Es un patrón de diseño orientado a objetos, en el que se suministran objetos (Inyección) a una clase en lugar de ser la propia clase quien cree el objeto. El término fue acuñado por primera vez por Martin Fowler.
  • 11. Inyección de dependencias  No se instancian las dependencias de forma explícita. En vez de eso, se realiza una declaración de las dependencias en la definición de la clase que, por medio de un objeto constructor “Builder” se resuelven inyectando la instancia específica en el momento de la instanciación de la clase que contiene la dependencia.
  • 14. Autofac Definición Es un contenedor de IoC para .NET que se encarga de administrar las dependencias entre clases de forma que la aplicación sea fácilmente actualizable y por tanto, escalable en tamaño y complejidad. Enlaces a documentación http://autofac.org/ https://code.google.com/p/autofac/ NUGET http://nuget.org/packages/Autofac/
  • 15. Autofac  Uso del contenedor  Registro de Componentes de forma individual  Registro de todos los Componentes de un ensamblado  Crear el contenedor  Obtener una instancia del contenedor  Registro de Interfaces con su implementación var builder = new ContainerBuilder(); builder.Register(c => new TaskController(c.Resolve<ITaskRepository>())); builder.RegisterType<TaskController>(); builder.RegisterInstance(new TaskController()); builder.RegisterAssemblyTypes(controllerAssembly); var container = builder.Build(); var taskController = container.Resolve<TaskController>(); builder.RegisterType<TaskController>().As<IController>(); // enabling var taskController = container.Resolve<IController>();
  • 16. Autofac  Expresar las dependencias  Cuando hay más de una dependencia  Parámetro por defecto para las dependencias  Dependencias circulares public class TaskController : IController { public TaskController(ITaskRepository tasks) { ... } } public TaskController(ITaskRepository tasks) public TaskController(ITaskRepository tasks, ILog log) public TaskController(ITaskRepository tasks, ILog log = null) public TaskController(Lazy<ITaskRepository> tasks)
  • 18. Autofac para MVC El módulo de Autofac para MVC disponible también en NUGET nos permite realizar operaciones habituales como el registro de los Controllers, los Model Binders, etc… de forma automatizada  Registro de los Controladores  Registro de los Model Binders  Inyección de abstracciones HTTP  Inyección de Dependencias en Vistas  Inyección de Propiedades en FilterAttributes NUGET http://nuget.org/packages/Autofac.Mvc4/
  • 19. Autofac para MVC  Registro de dependencias y del “resolvedor” de dependencias  Registro de los controladores manualmente  Registro de los controladores de un proyecto entero  Registro del “resolvedor” de dependencias protected void Application_Start() { var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // Other MVC setup... var builder = new ContainerBuilder(); builder.RegisterType<HomeController>().InstancePerHttpRequest(); var builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); IContainer container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  • 20. Autofac para MVC  Registro de Model Binders  Inyección de HTTP Abstractions  Registro de los controladores de un proyecto entero var builder = new ContainerBuilder(); builder.RegisterModelBinders(Assembly.GetExecutingAssembly()); builder.RegisterModelBinderProvider(); [ModelBinderType(typeof(string))] public class StringBinder : IModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { //do implementation here } } builder.RegisterModule(new AutofacWebTypesModule());
  • 21. Autofac para MVC  Inyectar dependencias en las vistas builder.RegisterSource(new ViewRegistrationSource()); public abstract class CustomViewPage : WebViewPage { public IDependency Dependency { get; set; } } public abstract class CustomViewPage : ViewPage { public IDependency Dependency { get; set; } } @inherits Example.Views.Shared.CustomViewPage <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Example.Views.Shared.CustomViewPage"%>
  • 22. Autofac para MVC  Inyectar Properties en FilterAttributes ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); builder.Register(c => new Logger()).As<ILogger>().InstancePerHttpRequest(); builder.RegisterFilterProvider(); IContainer container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); public class CustomActionFilter : ActionFilterAttribute { public ILogger Logger { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { Logger.Log("OnActionExecuting"); } } public class CustomAuthorizeAttribute : AuthorizeAttribute { public ILogger Logger { get; set; } protected override bool AuthorizeCore(HttpContextBase httpContext) { Logger.Log("AuthorizeCore"); return true; } } [CustomActionFilter] [CustomAuthorizeAttribute] public ActionResult Index() { // ... }
  • 26. Q&A