Primeros pasos con autofac
Instalación de Autofac
Para usar Autofac en su proyecto, todo lo que tiene que hacer es instalar Autofac desde NuGet Package Manager. Abra la solución en la que desea usar Autofac, luego seleccione ‘Administrar paquetes NuGet para la solución…’ yendo a:
Tools -> NuGet Package Manager -> Manager NuGet Packages for Solution...
En la pestaña NuGet-Solution
, escriba “Autofac” en el cuadro de búsqueda. Asegúrate de estar en la sección “Examinar”. Instale la primera opción como se muestra en la imagen a continuación (tome nota de las regiones marcadas en la imagen):
La instalación a través de NuGet agregará automáticamente Autofac en las referencias de los proyectos que se seleccionaron durante la instalación.
Echa un vistazo a la documentación oficial.
Configuración de Autofac
Este ejemplo le mostrará cómo comenzar con Inverion of Control usando Autofac con un proyecto relativamente simple, siguiendo de cerca los documentos oficiales de inicio.
-
Cree una aplicación de consola desde
Archivo -> Nuevo -> Proyecto -> Aplicación de consola
-
Instale Autofac para este proyecto. Puedes echar un vistazo aquí [Instalando Autofac][3]
-
Agregue 2 interfaces y 2 clases, con los siguientes nombres:
Interfaces | Classes -------------------------- IOutput | ConsoleOutput (implementing IOutput) IDateWriter | TodayWriter (implementing IDateWriter)
Para simplificar, no se muestran las instrucciones de uso ni los espacios de nombres.
E/S de salida.cs
public interface IOutput
{
void Write(string content);
}
ConsoleOutput.cs
public class ConsoleOutput : IOutput
{
public void Write(string content)
{
Console.WriteLine(content);
}
}
IDateWriter.cs
public interface IDateWriter
{
void WriteDate();
}
TodayWriter.cs
public class TodayWriter : IDateWriter
{
private IOutput _output;
public TodayWriter(IOutput output)
{
_output = output;
}
public void WriteDate()
{
_output.Write(DateTime.Today.ToShortDateString());
}
}
Hasta ahora, el código ha sido claro y simple. ¡Vayamos a la parte donde se lleva a cabo la inyección automática de dependencias, que por supuesto está siendo realizada por Autofac!
Reemplace la clase Program
en el archivo Program.cs con este código (Visual Studio crea automáticamente la clase Program
en la creación del proyecto. Si no existe, continúe y cree una):
class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
builder.RegisterType<TodayWriter>().As<IDateWriter>();
Container = builder.Build();
WriteDate();
}
public static void WriteDate()
{
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
}
Cuando se ejecuta, la salida debe ser la fecha actual en la consola. Ha utilizado con éxito Autofac en su proyecto para inyectar dependencias automáticamente.
Esto es lo que sucede debajo del capó:
- Al inicio de la aplicación, estamos creando un
ContainerBuilder
y registrando nuestros Componentes con él. Un componente en términos simples es un tipo .NET que implementa una interfaz y, por lo tanto, expone algunos servicios. Lea [Servicios frente a componentes][4]. - Luego registramos nuestros componentes (clases) con los servicios (interfaces) que exponen. Cuando se registra, Autofac sabe qué instancia de una clase crear cuando se va a resolver una interfaz.
- Finalmente, cuando ejecutamos el programa:
- El método
WriteDate()
(enMain()
) solicita a Autofac unIDateWriter
. - Autofac ve que
IDateWriter
se asigna aTodayWriter
, por lo que comienza a crear unTodayWriter
. - Autofac ve que
TodayWriter
necesita unIOutput
en su constructor. - Autofac ve que
IOutput
se asigna aConsoleOutput
, por lo que crea una nueva instancia deConsoleOutput
. - Autofac usa la nueva instancia
ConsoleOutput
para terminar de construir elTodayWriter
. - Autofac devuelve el ‘TodayWriter’ completamente construido para que lo consuma ‘WriteDate()’.
[3]: https://www.wikiod.com/es/autofac/primeros-pasos-con-autofac#Instalación de Autofac [4]: http://docs.autofac.org/en/latest/register/registration.html#services-vs-components