Passo 1: Adicionar os Pacotes NuGet
No gerenciador de pacotes NuGet, pesquise por "Autofac" e instale as duas bibliotecas necessárias: a biblioteca principal do Autofac e a biblioteca de integração para inversão de controle.
Passo 2: Registrar os Serviços
Modifique o método ConfigureServices na classe Startup para integrar o Autofac.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// 1. Criar uma instância do construtor de contêiner
var builder = new ContainerBuilder();
// 2. Incorporar os serviços padrão do sistema
builder.Populate(services);
// 3. Registrar serviços por tipo
builder.RegisterType<UserRepository>().As<IUserRepository>().SingleInstance();
// 4. Construir o contêiner
var container = builder.Build();
// 5. Retornar o provedor de serviços
return new AutofacServiceProvider(container);
}
Passo 3: Utilizar a Injeção
Para consumir os serviços, utilize a injeção via construtor em um controlador ou outra classe.
public class UserController : Controller
{
private readonly IUserRepository _userRepository;
// Injeção de dependência no construtor
public UserController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public IActionResult Details()
{
var result = _userRepository.GetDetails();
return Content($"Dados obtidos: {result}");
}
}
Extensão: Regsitro por Módulo
Além do registro por tipo, o Autofac suporta organização via módulos. Crie uma classe que herde de Autofac.Module.
public class RepositoryModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<UserRepository>().As<IUserRepository>().SingleInstance();
// Registrar outros tipos aqui...
}
}
Em seguida, atualize o método de configuração para utilizar o módulo.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
var builder = new ContainerBuilder();
builder.Populate(services);
// Registrar via módulo em vez de tipo individual
builder.RegisterModule<RepositoryModule>();
var container = builder.Build();
return new AutofacServiceProvider(container);
}