Autofac .NET 6 (Como funciona para desenvolvedores)
No contexto do desenvolvimento .NET , o gerenciamento eficiente de dependências é crucial para a criação de aplicações escaláveis, de fácil manutenção e testáveis. Os contêineres de injeção de dependência (DI) desempenham um papel fundamental na obtenção desses objetivos, facilitando o princípio da inversão de controle (IoC). Dentre a infinidade de bibliotecas genéricas de mecanismos de hospedagem disponíveis, o Autofac se destaca como um framework rico em recursos e extensível for .NET.
Neste artigo, embarcaremos em uma jornada para explorar o Autofac .NET 6, desvendando seus recursos e benefícios para apresentar exemplos práticos de seu uso. Mais adiante neste artigo, aprenderemos sobre o IronPDF, uma poderosa biblioteca de geração de PDFs da Iron Software. Também apresentaremos um caso de uso onde o Autofac .NET e o IronPDF são utilizados em conjunto.
Entendendo o Autofac .NET
O Autofac é um contêiner IoC de código aberto for .NET que oferece suporte abrangente à injeção de dependência e ao registro de componentes em aplicativos como APIs da Web. Desenvolvido por Nicholas Blumhardt e mantido por uma comunidade dedicada, o Autofac oferece uma solução robusta e flexível para gerenciar o ciclo de vida de objetos, resolver dependências e compor componentes de aplicativos.
Para obter mais informações sobre como o Autofac aprimora seus aplicativos .NET , considere explorar os recursos fornecidos pela Biblioteca PDF .NET da IronPDF , que destaca recursos avançados para geração e manipulação de PDFs. Você também pode explorar a biblioteca de código de barras .NET da IronBarcode para ver aplicações práticas de injeção de dependência na geração de códigos de barras.
Para obter mais informações e exemplos práticos sobre o uso do Autofac em cenários reais, visite a página oficial da IronSoftware , onde você encontrará um conjunto completo de produtos, como o IronOCR e o IronXL , que se integram perfeitamente ao Autofac e aprimoram seu processo de desenvolvimento .NET .
Características do Autofac
-
Criação de contêineres e registro de componentes: Você pode criar contêineres usando o Autofac registrando componentes na classe de inicialização. Você pode registrar componentes usando lambdas, tipos ou instâncias pré-construídas.
public class Startup { public void ConfigureContainer() { var builder = new ContainerBuilder(); // Create a new container builder builder.RegisterInstance(new TaskRepository()).As<ITaskRepository>(); // Register an instance for ITaskRepository builder.RegisterType<TaskController>(); // Register TaskController type builder.Register(c => new LogManager(DateTime.Now)).As<ILogger>(); // Use lambda expression to register ILogger // Scan an assembly for components and register them builder.RegisterAssemblyTypes(myAssembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces(); var container = builder.Build(); // Build the container } }public class Startup { public void ConfigureContainer() { var builder = new ContainerBuilder(); // Create a new container builder builder.RegisterInstance(new TaskRepository()).As<ITaskRepository>(); // Register an instance for ITaskRepository builder.RegisterType<TaskController>(); // Register TaskController type builder.Register(c => new LogManager(DateTime.Now)).As<ILogger>(); // Use lambda expression to register ILogger // Scan an assembly for components and register them builder.RegisterAssemblyTypes(myAssembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces(); var container = builder.Build(); // Build the container } }Public Class Startup Public Sub ConfigureContainer() Dim builder = New ContainerBuilder() ' Create a new container builder builder.RegisterInstance(New TaskRepository()).As(Of ITaskRepository)() ' Register an instance for ITaskRepository builder.RegisterType(Of TaskController)() ' Register TaskController type builder.Register(Function(c) New LogManager(DateTime.Now)).As(Of ILogger)() ' Use lambda expression to register ILogger ' Scan an assembly for components and register them builder.RegisterAssemblyTypes(myAssembly).Where(Function(t) t.Name.EndsWith("Repository")).AsImplementedInterfaces() Dim container = builder.Build() ' Build the container End Sub End Class$vbLabelText $csharpLabel -
Expressar dependências: O Autofac pode injetar parâmetros de construtor, lidar com injeção de propriedades e injeção de métodos.
public class TaskController { private ITaskRepository _repository; private ILogger _logger; public TaskController(ITaskRepository repository, ILogger logger) { _repository = repository; // Assign injected repository to the local variable _logger = logger; // Assign injected logger to the local variable } }public class TaskController { private ITaskRepository _repository; private ILogger _logger; public TaskController(ITaskRepository repository, ILogger logger) { _repository = repository; // Assign injected repository to the local variable _logger = logger; // Assign injected logger to the local variable } }Public Class TaskController Private _repository As ITaskRepository Private _logger As ILogger Public Sub New(ByVal repository As ITaskRepository, ByVal logger As ILogger) _repository = repository ' Assign injected repository to the local variable _logger = logger ' Assign injected logger to the local variable End Sub End Class$vbLabelText $csharpLabel -
Sistema de módulos flexível: Os módulos do Autofac encontram um equilíbrio entre a configuração XML e os registros baseados em código. Você pode especificar registros complexos em código ou alterar o comportamento em tempo de implantação usando XML.
public class CarTransportModule : Module { public bool ObeySpeedLimit { get; set; } protected override void Load(ContainerBuilder builder) { builder.RegisterType<Car>().As<IVehicle>(); // Register Car as IVehicle if (ObeySpeedLimit) builder.RegisterType<SaneDriver>().As<IDriver>(); // Register SaneDriver if speed limit is to be obeyed else builder.RegisterType<CrazyDriver>().As<IDriver>(); // Register CrazyDriver otherwise } }public class CarTransportModule : Module { public bool ObeySpeedLimit { get; set; } protected override void Load(ContainerBuilder builder) { builder.RegisterType<Car>().As<IVehicle>(); // Register Car as IVehicle if (ObeySpeedLimit) builder.RegisterType<SaneDriver>().As<IDriver>(); // Register SaneDriver if speed limit is to be obeyed else builder.RegisterType<CrazyDriver>().As<IDriver>(); // Register CrazyDriver otherwise } }Public Class CarTransportModule Inherits Module Public Property ObeySpeedLimit() As Boolean Protected Overrides Sub Load(ByVal builder As ContainerBuilder) builder.RegisterType(Of Car)().As(Of IVehicle)() ' Register Car as IVehicle If ObeySpeedLimit Then builder.RegisterType(Of SaneDriver)().As(Of IDriver)() ' Register SaneDriver if speed limit is to be obeyed Else builder.RegisterType(Of CrazyDriver)().As(Of IDriver)() ' Register CrazyDriver otherwise End If End Sub End Class$vbLabelText $csharpLabel -
Pontos de extensão simples: O Autofac fornece eventos de ativação para personalizar a ativação ou liberação de componentes.
var builder = new ContainerBuilder(); builder.RegisterType<Listener>().As<IListener>().OnActivated(e => e.Instance.StartListening()); // Setup activation event builder.RegisterType<Processor>().OnActivating(e => e.Instance.Initialize()); // Setup activating event var container = builder.Build();var builder = new ContainerBuilder(); builder.RegisterType<Listener>().As<IListener>().OnActivated(e => e.Instance.StartListening()); // Setup activation event builder.RegisterType<Processor>().OnActivating(e => e.Instance.Initialize()); // Setup activating event var container = builder.Build();Dim builder = New ContainerBuilder() builder.RegisterType(Of Listener)().As(Of IListener)().OnActivated(Function(e) e.Instance.StartListening()) ' Setup activation event builder.RegisterType(Of Processor)().OnActivating(Function(e) e.Instance.Initialize()) ' Setup activating event Dim container = builder.Build()$vbLabelText $csharpLabel
Principais funcionalidades do Autofac .NET
-
Registro flexível de componentes: O Autofac permite que os desenvolvedores registrem componentes usando diversas técnicas de registro, incluindo registro manual, varredura de assembly e registro baseado em atributos. Essa flexibilidade permite um controle preciso sobre a instanciação e configuração dos componentes.
-
Gerenciamento do Ciclo de Vida: O Autofac suporta vários escopos de ciclo de vida de objetos, incluindo singleton, instância por dependência, instância por escopo de ciclo de vida e instância por requisição. Esse controle granular sobre o ciclo de vida dos objetos garante a utilização eficiente de recursos e evita vazamentos de memória em aplicações de longa duração.
-
Resolução automática de dependências: O Autofac resolve automaticamente as dependências com base nos registros de componentes e suas respectivas dependências. Essa fiação automática simplifica a configuração de grafos de objetos complexos e promove um acoplamento flexível entre os componentes.
-
Composição de Módulos: O Autofac permite que os desenvolvedores organizem e encapsulem registros de componentes usando módulos. Os módulos servem como contêineres lógicos para registros relacionados, facilitando o gerenciamento e a manutenção de aplicações de grande escala com múltiplos componentes.
-
Interceptação e AOP: O Autofac oferece suporte para interceptação e programação orientada a aspectos (AOP) por meio de sua extensão de interceptação. Com a interceptação, os desenvolvedores podem aplicar preocupações transversais, como registro de logs, armazenamento em cache e segurança, aos componentes sem modificar sua implementação.
- Integração com ASP.NET Core e .NET Core : O Autofac integra-se perfeitamente com o .NET Core e o ASP.NET Core, oferecendo suporte de primeira classe para injeção de dependência em aplicações web modernas e microsserviços. Ele aproveita a abstração de provedor de serviços integrada para garantir compatibilidade e interoperabilidade com o ecossistema .NET .
Exemplos práticos com Autofac .NET
Vamos explorar alguns exemplos práticos para ilustrar o uso do Autofac .NET:
public class Program
{
public static void Main()
{
// Setting up Autofac container
var builder = new ContainerBuilder();
// Registering types manually
builder.RegisterType<MyService>().As<IMyService>();
// Registering types using assembly scanning
builder.RegisterAssemblyTypes(typeof(MyAssembly).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
// Registering modules
builder.RegisterModule(new MyModule());
// Building the container
var container = builder.Build();
// Resolving dependencies
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IMyService>();
service.DoSomething();
}
}
}
public class Program
{
public static void Main()
{
// Setting up Autofac container
var builder = new ContainerBuilder();
// Registering types manually
builder.RegisterType<MyService>().As<IMyService>();
// Registering types using assembly scanning
builder.RegisterAssemblyTypes(typeof(MyAssembly).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
// Registering modules
builder.RegisterModule(new MyModule());
// Building the container
var container = builder.Build();
// Resolving dependencies
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IMyService>();
service.DoSomething();
}
}
}
Public Class Program
Public Shared Sub Main()
' Setting up Autofac container
Dim builder = New ContainerBuilder()
' Registering types manually
builder.RegisterType(Of MyService)().As(Of IMyService)()
' Registering types using assembly scanning
builder.RegisterAssemblyTypes(GetType(MyAssembly).Assembly).Where(Function(t) t.Name.EndsWith("Repository")).AsImplementedInterfaces()
' Registering modules
builder.RegisterModule(New MyModule())
' Building the container
Dim container = builder.Build()
' Resolving dependencies
Using scope = container.BeginLifetimeScope()
Dim service = scope.Resolve(Of IMyService)()
service.DoSomething()
End Using
End Sub
End Class
Nesta seção, demonstramos a implementação prática do Autofac .NET para injeção de dependência. Desde o registro manual até a varredura de assemblies e o registro baseado em módulos, demonstramos a flexibilidade que o Autofac oferece no gerenciamento de dependências. Ao utilizar essas técnicas, os desenvolvedores podem simplificar o processo de injeção de dependências de seus aplicativos, melhorando a capacidade de manutenção e a escalabilidade.
Para obter mais informações sobre como os produtos da Iron Software podem se integrar aos seus aplicativos .NET para otimizar e aprimorar ainda mais a funcionalidade, explore a documentação do IronPDF, onde você pode aprender a gerar e editar documentos PDF programaticamente, ou visite o site da Iron Software para descobrir uma ampla gama de poderosas bibliotecas .NET , como o IronBarcode para leitura e gravação de códigos de barras e o IronOCR para reconhecimento óptico de caracteres avançado.
Benefícios de usar o Autofac .NET
-
Simplicidade e Flexibilidade: O Autofac oferece uma API simples e intuitiva para registrar e resolver componentes, facilitando a implementação e a manutenção da injeção de dependências.
-
Testabilidade e Manutenibilidade: Ao promover o baixo acoplamento e a inversão de dependências, o Autofac aprimora a testabilidade e a manutenibilidade de aplicativos .NET , permitindo testes unitários e refatoração com facilidade.
-
Desempenho e escalabilidade: O desempenho de tempo de execução leve e eficiente do Autofac o torna adequado para aplicações de alto desempenho e sistemas escaláveis com grandes grafos de objetos.
-
Extensibilidade e Personalização: A arquitetura extensível do Autofac permite que os desenvolvedores estendam e personalizem o comportamento do Autofac por meio de módulos personalizados, fontes de registro e componentes de middleware, atendendo a diversos requisitos de aplicativos.
- Comunidade e Suporte: Com uma comunidade ativa de desenvolvedores e documentação abrangente, o Autofac oferece excelente suporte e recursos para aprendizado, solução de problemas e contribuição para o framework.
Licença Autofac
O Autofac é distribuído sob a licença MIT, que permite seu uso gratuito para fins de desenvolvimento e comerciais.
Apresentando o IronPDF da Iron Software

IronPDF é uma biblioteca robusta em C# para PDFs, projetada para fornecer uma solução completa para o gerenciamento de PDFs em projetos .NET . Seja para criar, editar, exportar, proteger, carregar ou manipular documentos PDF, o IronPDF tem as ferramentas que você precisa. Aqui estão algumas de suas características e aplicações mais marcantes:
Saiba mais sobre como criar PDFs com o IronPDF. Descubra como editar PDFs de forma eficiente com o IronPDF.
- Explore os recursos de segurança do IronPDF
- Visite o site da Iron Software para obter mais detalhes. Consulte a documentação do IronPDF para obter orientações detalhadas.
Principais características
-
Conversão de HTML para PDF: Converta conteúdo HTML para PDF sem esforço. Gere PDFs a partir de HTML, MVC, ASPX e imagens.
-
Gerenciamento de PDFs: Com mais de 50 recursos, o IronPDF permite assinar, editar e extrair conteúdo de PDFs, facilitando a criação de assinaturas digitais e a realização de modificações.
- Suporte multiplataforma: Compatível com C#, F# e VB .NET, o IronPDF funciona em várias versões do .NET , incluindo .NET Core, .NET Standard e .NET Framework. Também está disponível for Java, Node.js e Python.
Para saber mais sobre como o IronPDF pode integrar funcionalidades de PDF em seus projetos, visite a página do produto IronPDF .
Para uma visão geral completa dos produtos oferecidos pela Iron Software, incluindo IronBarcode, IronOCR e outros, visite a página inicial da Iron Software .
Compatibilidade e Ambientes
-
Versões do .NET : Suporta C#, VB .NET e F#.
-
Tipos de projeto: Adequado para aplicações web ( Blazor e WebForms com IronPDF ), desktop (WPF e MAUI) e de console.
-
Ambientes de aplicativos: Compatível com Windows, Linux, Mac, Docker, Azure, AWS e muito mais.
-
IDEs: Integra-se perfeitamente com o Microsoft Visual Studio e o JetBrains Rider .
- Sistemas Operacionais e Processadores: Funciona em Windows, Mac e Linux (x64, x86, ARM).
Padrões e edição de PDF
-
Compatibilidade: Suporta várias versões de PDF (1.2 - 1.7), PDF/UA e PDF/A.
-
Personalização: Defina propriedades, segurança e compressão para arquivos PDF.
-
Metadados e Estrutura: Edite metadados, histórico de revisões e estrutura do documento.
- Modelos e configurações: Aplique modelos de página, cabeçalhos, rodapés e configurações de página.
Para obter mais informações sobre esses recursos e como implementá-los, visite o guia detalhado de geração e manipulação de PDFs no site oficial do IronPDF .
Otimização de desempenho
-
Eficiência: Suporte completo a multithreading e processamento assíncrono para geração eficiente de PDFs.
- Prioridade: Foco na precisão, facilidade de uso e velocidade.
Vejamos agora um exemplo prático com essas duas bibliotecas.
Gere documentos PDF usando Autofac .NET e IronPDF.
Primeiro, vamos criar um aplicativo de console do Visual Studio.

Forneça o nome e a localização do projeto.

Na próxima etapa, selecione a versão do .NET desejada e clique em Criar.
Em seguida, instale a biblioteca IronPDF a partir do pacote NuGet no Gerenciador de Pacotes do Visual Studio.

Visite a documentação do IronPDF para obter mais informações sobre como instalar e utilizar a biblioteca IronPDF .
Instale o Autofac a partir do pacote NuGet no Gerenciador de Pacotes do Visual Studio.

Saiba mais sobre o Autofac visitando a página de documentação do Autofac .
Exemplo de código: Autofac e IronPDF
using Autofac;
using CacheManager.Core;
using IronPdf;
using System.Reflection;
namespace IronPdfDemos
{
public class AutoFac
{
public static void Execute()
{
// Instantiate Cache and ChromePdfRenderer
var renderer = new ChromePdfRenderer();
var cache = CacheFactory.Build("ironPdfAutofac", settings =>
{
settings.WithDictionaryHandle();
});
// Prepare HTML content
var content = "<h1>Demonstrate Autofac with IronPDF</h1>";
content += "<p>This is an illustration of using Autofac for dependency injection and IronPDF for generating PDF documents.</p>";
content += "<h2>Setting up Autofac container</h2>";
// Setting up Autofac container
var builder = new ContainerBuilder();
content += "<p>var builder = new ContainerBuilder();</p>";
content += "<h2>Registering types manually</h2>";
// Registering types manually
builder.RegisterType<MyService>().As<IMyService>();
content += "<p>builder.RegisterType<MyService>().As<IMyService();</p>";
content += "<h2>Registering types using assembly scanning</h2>";
// Registering types using assembly scanning
builder.RegisterAssemblyTypes(typeof(AutoFac).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
content += "<p>builder.RegisterAssemblyTypes(typeof(AutoFac).Assembly).Where(t => t.Name.EndsWith(\"Repository\")).AsImplementedInterfaces();</p>";
content += "<h2>Registering modules</h2>";
// Registering modules
builder.RegisterModule(new MyModule());
content += "<p>builder.RegisterModule(new MyModule());</p>";
content += "<h2>Building the container</h2>";
// Building the container
var container = builder.Build();
content += "<p>var container = builder.Build();</p>";
content += "<h2>Resolving dependencies</h2>";
// Resolving dependencies
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IMyService>();
service.DoSomething();
}
content += "<p>var service = scope.Resolve<IMyService();</p>";
// Create a PDF from the HTML string using C#
var pdf = renderer.RenderHtmlAsPdf(content);
// Export to a file or Stream
pdf.SaveAs("autofac.pdf");
Console.WriteLine("We are done...");
Console.ReadKey();
}
}
internal interface IMyService
{
void DoSomething();
}
internal class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// Register module dependencies here
}
}
internal class MyService : IMyService
{
public void DoSomething()
{
Console.WriteLine("DoSomething");
}
}
}
using Autofac;
using CacheManager.Core;
using IronPdf;
using System.Reflection;
namespace IronPdfDemos
{
public class AutoFac
{
public static void Execute()
{
// Instantiate Cache and ChromePdfRenderer
var renderer = new ChromePdfRenderer();
var cache = CacheFactory.Build("ironPdfAutofac", settings =>
{
settings.WithDictionaryHandle();
});
// Prepare HTML content
var content = "<h1>Demonstrate Autofac with IronPDF</h1>";
content += "<p>This is an illustration of using Autofac for dependency injection and IronPDF for generating PDF documents.</p>";
content += "<h2>Setting up Autofac container</h2>";
// Setting up Autofac container
var builder = new ContainerBuilder();
content += "<p>var builder = new ContainerBuilder();</p>";
content += "<h2>Registering types manually</h2>";
// Registering types manually
builder.RegisterType<MyService>().As<IMyService>();
content += "<p>builder.RegisterType<MyService>().As<IMyService();</p>";
content += "<h2>Registering types using assembly scanning</h2>";
// Registering types using assembly scanning
builder.RegisterAssemblyTypes(typeof(AutoFac).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
content += "<p>builder.RegisterAssemblyTypes(typeof(AutoFac).Assembly).Where(t => t.Name.EndsWith(\"Repository\")).AsImplementedInterfaces();</p>";
content += "<h2>Registering modules</h2>";
// Registering modules
builder.RegisterModule(new MyModule());
content += "<p>builder.RegisterModule(new MyModule());</p>";
content += "<h2>Building the container</h2>";
// Building the container
var container = builder.Build();
content += "<p>var container = builder.Build();</p>";
content += "<h2>Resolving dependencies</h2>";
// Resolving dependencies
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IMyService>();
service.DoSomething();
}
content += "<p>var service = scope.Resolve<IMyService();</p>";
// Create a PDF from the HTML string using C#
var pdf = renderer.RenderHtmlAsPdf(content);
// Export to a file or Stream
pdf.SaveAs("autofac.pdf");
Console.WriteLine("We are done...");
Console.ReadKey();
}
}
internal interface IMyService
{
void DoSomething();
}
internal class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// Register module dependencies here
}
}
internal class MyService : IMyService
{
public void DoSomething()
{
Console.WriteLine("DoSomething");
}
}
}
Imports Autofac
Imports CacheManager.Core
Imports IronPdf
Imports System.Reflection
Namespace IronPdfDemos
Public Class AutoFac
Public Shared Sub Execute()
' Instantiate Cache and ChromePdfRenderer
Dim renderer = New ChromePdfRenderer()
Dim cache = CacheFactory.Build("ironPdfAutofac", Sub(settings)
settings.WithDictionaryHandle()
End Sub)
' Prepare HTML content
Dim content = "<h1>Demonstrate Autofac with IronPDF</h1>"
content &= "<p>This is an illustration of using Autofac for dependency injection and IronPDF for generating PDF documents.</p>"
content &= "<h2>Setting up Autofac container</h2>"
' Setting up Autofac container
Dim builder = New ContainerBuilder()
content &= "<p>var builder = new ContainerBuilder();</p>"
content &= "<h2>Registering types manually</h2>"
' Registering types manually
builder.RegisterType(Of MyService)().As(Of IMyService)()
content &= "<p>builder.RegisterType<MyService>().As<IMyService();</p>"
content &= "<h2>Registering types using assembly scanning</h2>"
' Registering types using assembly scanning
builder.RegisterAssemblyTypes(GetType(AutoFac).Assembly).Where(Function(t) t.Name.EndsWith("Repository")).AsImplementedInterfaces()
content &= "<p>builder.RegisterAssemblyTypes(typeof(AutoFac).Assembly).Where(t => t.Name.EndsWith(""Repository"")).AsImplementedInterfaces();</p>"
content &= "<h2>Registering modules</h2>"
' Registering modules
builder.RegisterModule(New MyModule())
content &= "<p>builder.RegisterModule(new MyModule());</p>"
content &= "<h2>Building the container</h2>"
' Building the container
Dim container = builder.Build()
content &= "<p>var container = builder.Build();</p>"
content &= "<h2>Resolving dependencies</h2>"
' Resolving dependencies
Using scope = container.BeginLifetimeScope()
Dim service = scope.Resolve(Of IMyService)()
service.DoSomething()
End Using
content &= "<p>var service = scope.Resolve<IMyService();</p>"
' Create a PDF from the HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf(content)
' Export to a file or Stream
pdf.SaveAs("autofac.pdf")
Console.WriteLine("We are done...")
Console.ReadKey()
End Sub
End Class
Friend Interface IMyService
Sub DoSomething()
End Interface
Friend Class MyModule
Inherits Module
Protected Overrides Sub Load(ByVal builder As ContainerBuilder)
' Register module dependencies here
End Sub
End Class
Friend Class MyService
Implements IMyService
Public Sub DoSomething() Implements IMyService.DoSomething
Console.WriteLine("DoSomething")
End Sub
End Class
End Namespace
Explicação do código
Vamos analisar o trecho de código que você forneceu:
-
Configuração do ChromePdfRenderer:
- O código inicializa uma instância
ChromePdfRendererpara renderizar PDFs a partir de conteúdo HTML, um recurso fundamental do IronPDF .
- O código inicializa uma instância
-
Preparação do conteúdo HTML:
-
A variável
contenté uma string HTML que será usada para gerar o PDF. - Inclui uma tag
<h1>com o título "Demonstrar Autofac com IronPDF".
-
-
Configurando o contêiner Autofac:
-
O código cria uma instância de
ContainerBuilderchamadabuilder. - Este é o primeiro passo para configurar um contêiner Autofac para injeção de dependência.
-
-
Registro manual de tipos:
-
Registra um tipo
MyServicecomo uma implementação da interfaceIMyService. - Isso permite que o Autofac resolva as dependências quando necessário.
-
-
Registro de tipos usando varredura de assembly:
-
Ele examina o assembly que contém o tipo
AutoFac. - Registra os tipos cujos nomes terminam com "Repository" como implementações de suas respectivas interfaces.
-
-
Registro de módulos:
-
Ele registra um módulo chamado
MyModule. - Os módulos permitem o agrupamento de registros relacionados.
-
-
Construindo o Contêiner:
- O contêiner é construído a partir dos componentes registrados usando o método
builder.Build().
- O contêiner é construído a partir dos componentes registrados usando o método
-
Resolvendo dependências:
-
Dentro de um escopo de tempo de vida (
using (var scope = container.BeginLifetimeScope())), ele resolve uma instância deIMyService. - O método
DoSomethingé chamado no serviço resolvido.
-
-
Geração de PDF:
-
Um PDF é criado a partir do conteúdo usando o
ChromePdfRenderer. - O PDF resultante é salvo como "autofac.pdf".
-
Saída

Licença IronPDF
O IronPDF requer uma chave de licença. Insira a chave de licença no arquivo appSettings.json conforme mostrado abaixo.
{
"IronPdf.License.LicenseKey": "The Key Here"
}Perguntas frequentes
O que é o Autofac e como ele funciona no .NET 6?
O Autofac é um contêiner de injeção de dependência (DI) for .NET, que permite o gerenciamento eficiente de dependências por meio de recursos como a criação de contêineres e o registro de componentes. No .NET 6, o Autofac continua a aprimorar a escalabilidade e a facilidade de manutenção das aplicações.
Como o Autofac pode ser utilizado no desenvolvimento de aplicações web modernas?
O Autofac integra-se perfeitamente com o ASP.NET Core e o .NET Core, facilitando o desenvolvimento de aplicações web modernas ao fornecer suporte robusto para injeção de dependência e sistemas de módulos flexíveis.
Quais são os benefícios de usar o Autofac em aplicações .NET?
O Autofac oferece benefícios como registro flexível de componentes, gerenciamento de ciclo de vida, resolução automática de dependências e suporte para interceptação e programação orientada a aspectos (AOP), o que aprimora a escalabilidade e a testabilidade de aplicativos .NET.
Como posso gerar PDFs em uma aplicação .NET?
Você pode gerar PDFs em um aplicativo .NET usando o IronPDF, uma biblioteca C# que fornece métodos para criar, editar e gerenciar documentos PDF programaticamente.
É possível integrar o Autofac com uma biblioteca de geração de PDF em .NET?
Sim, o Autofac pode ser integrado a uma biblioteca de geração de PDF como o IronPDF, configurando um contêiner de injeção de dependência para gerenciar os serviços da biblioteca de PDF dentro de um aplicativo .NET.
Qual é o papel dos contêineres de injeção de dependência, como o Autofac, no desenvolvimento .NET?
Contêineres de injeção de dependência como o Autofac facilitam o princípio de inversão de controle (IoC) no desenvolvimento .NET, gerenciando dependências, o que leva a aplicações mais escaláveis, fáceis de manter e testar.
Como o Autofac oferece suporte à resolução automática de dependências?
O Autofac oferece suporte à resolução automática de dependências, permitindo que os desenvolvedores registrem componentes e resolvam suas dependências por meio de seu contêiner, simplificando o gerenciamento de componentes e aumentando a escalabilidade do aplicativo.
Quais são algumas das principais características de uma biblioteca PDF em C# for .NET?
As principais funcionalidades de uma biblioteca PDF em C#, como o IronPDF, incluem conversão de HTML para PDF, suporte multiplataforma e compatibilidade com diversas versões do .NET, permitindo a criação e o gerenciamento abrangentes de documentos PDF.




