Przejdź do treści stopki
POMOC .NET

Autofac .NET 6 (jak to działa dla programistów)

W dziedzinie programowania .NET efektywne zarządzanie zależnościami ma kluczowe znaczenie dla tworzenia skalowalnych, łatwych w utrzymaniu i testowalnych aplikacji. Kontenery wstrzykiwania zależności (DI) odgrywają kluczową rolę w osiąganiu tych celów, ułatwiając stosowanie zasady odwrócenia kontroli (IoC). Wśród mnóstwa dostępnych bibliotek ogólnych mechanizmów hostingu, Autofac wyróżnia się jako bogaty w funkcje i rozszerzalny framework dla .NET Framework.

W tym artykule wyruszymy w podróż, aby poznać Autofac .NET 6, odkrywając jego funkcje i zalety oraz przedstawiając praktyczne przykłady jego zastosowania. W dalszej części tego artykułu zapoznamy się z IronPDF, potężną biblioteką do generowania plików PDF firmy Iron Software. Przedstawimy również przykład zastosowania, w którym Autofac.NET i IronPDF są używane razem.

Zrozumienie Autofac .NET

Autofac to kontener IoC typu open source dla platformy .NET, który zapewnia kompleksową obsługę wstrzykiwania zależności i rejestracji komponentów w aplikacjach, takich jak interfejsy API sieci Web. Opracowany przez Nicholasa Blumhardta i utrzymywany przez dedykowaną społeczność, Autofac oferuje solidne i elastyczne rozwiązanie do zarządzania cyklem życia obiektów, rozwiązywania zależności oraz komponowania elementów aplikacji.

Aby uzyskać więcej informacji na temat tego, jak Autofac usprawnia działanie aplikacji .NET, warto zapoznać się z zasobami udostępnionymi przez bibliotekę .NET PDF firmy IronPDF, która podkreśla zaawansowane funkcje generowania i edycji plików PDF. Możesz również zapoznać się z biblioteką IronBarcode dla .NET, aby zobaczyć praktyczne zastosowania wstrzykiwania zależności w generowaniu kodów kreskowych.

Zapoznaj się z dodatkowymi informacjami i praktycznymi przykładami wykorzystania Autofac w rzeczywistych scenariuszach, odwiedzając oficjalną stronę IronSoftware, gdzie znajdziesz kompleksowy zestaw produktów, takich jak IronOCR i IronXL, które płynnie integrują się z Autofac i usprawniają proces tworzenia oprogramowania w środowisku .NET.

Funkcje Autofac

  1. Tworzenie kontenerów i rejestracja komponentów: Można tworzyć kontenery przy użyciu Autofac poprzez rejestrację komponentów w klasie startowej. Komponenty można rejestrować za pomocą lambd, typów lub gotowych instancji.

    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
  2. Wyrażanie zależności: Autofac może wstrzykiwać parametry konstruktora, obsługiwać wstrzykiwanie właściwości oraz wstrzykiwanie metod.

    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
  3. Elastyczny system modułów: moduły Autofac zapewniają równowagę między konfiguracją XML a rejestracjami opartymi na kodzie. Można określać złożone rejestracje w kodzie lub zmieniać zachowanie w czasie wdrażania za pomocą 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
  4. Proste punkty rozszerzeń: Autofac udostępnia zdarzenia aktywacji, które pozwalają dostosować aktywację lub zwolnienie komponentów.

    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

Kluczowe funkcje Autofac.NET

  1. Elastyczna rejestracja komponentów: Autofac umożliwia programistom rejestrowanie komponentów przy użyciu różnorodnych technik rejestracji, w tym ręcznej rejestracji, skanowania zestawów i rejestracji opartej na atrybutach. Ta elastyczność zapewnia szczegółową kontrolę nad tworzeniem i konfiguracją komponentów.

  2. Zarządzanie cyklem życia: Autofac obsługuje różne zakresy cyklu życia obiektów, w tym singleton, instancja na zależność, instancja na zakres cyklu życia oraz instancja na żądanie. Ta szczegółowa kontrola nad cyklem życia obiektów zapewnia efektywne wykorzystanie zasobów i zapobiega wyciekom pamięci w długo działających aplikacjach.

  3. Automatyczne rozwiązywanie zależności: Autofac automatycznie rozwiązuje zależności na podstawie zarejestrowanych komponentów i ich zależności. To automatyczne okablowanie upraszcza konfigurację złożonych grafów obiektów i promuje luźne sprzężenie między komponentami.

  4. Kompozycja modułów: Autofac umożliwia programistom organizowanie i hermetyzowanie rejestracji komponentów za pomocą modułów. Moduły służą jako logiczne kontenery dla powiązanych rejestracji, ułatwiając zarządzanie i utrzymanie dużych aplikacji z wieloma komponentami.

  5. Przechwytywanie i programowanie aspektowe (AOP): Autofac zapewnia obsługę przechwytywania i programowania aspektowego (AOP) za pośrednictwem rozszerzenia przechwytywania. Dzięki przechwytywaniu programiści mogą stosować zagadnienia przekrojowe, takie jak rejestrowanie, buforowanie i zabezpieczenia, do komponentów bez modyfikowania ich implementacji.

  6. Integracja z ASP.NET Core i .NET Core: Autofac płynnie integruje się z .NET Core i ASP.NET Core, zapewniając pierwszorzędną obsługę wstrzykiwania zależności w nowoczesnych aplikacjach internetowych i mikrousługach. Wykorzystuje wbudowaną abstrakcję dostawcy usług, aby zapewnić zgodność i interoperacyjność z ekosystemem .NET.

Praktyczne przykłady z Autofac.NET

Przyjrzyjmy się kilku praktycznym przykładom ilustrującym użycie 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
$vbLabelText   $csharpLabel

W tej sekcji zaprezentowaliśmy praktyczną implementację Autofac.NET do wstrzykiwania zależności. Od ręcznej rejestracji, przez skanowanie zestawów, po rejestrację opartą na modułach — pokazaliśmy elastyczność, jaką Autofac oferuje w zarządzaniu zależnościami. Korzystając z tych technik, programiści mogą usprawnić proces wstrzykiwania zależności w swojej aplikacji, zwiększając łatwość utrzymania i skalowalność.

Aby uzyskać więcej informacji na temat integracji produktów Iron Software z aplikacjami .NET w celu dalszego usprawnienia funkcjonalności, zapoznaj się z dokumentacją IronPDF, gdzie dowiesz się, jak programowo generować i edytować dokumenty PDF, lub odwiedź stronę Iron Software, aby odkryć szeroką gamę potężnych bibliotek .NET, takich jak IronBarcode do odczytu i zapisu kodów kreskowych oraz IronOCR do zaawansowanego optycznego rozpoznawania znaków.

Korzyści z używania Autofac.NET

  1. Prostota i elastyczność: Autofac oferuje proste i intuicyjne API do rejestrowania i rozwiązywania komponentów, dzięki czemu wstrzykiwanie zależności jest łatwe do wdrożenia i utrzymania.

  2. Testowalność i łatwość utrzymania: Promując luźne sprzężenie i odwrócenie zależności, Autofac zwiększa testowalność i łatwość utrzymania aplikacji .NET, umożliwiając testy jednostkowe i refaktoryzację z łatwością.

  3. Wydajność i skalowalność: Lekka i wydajna wydajność środowiska uruchomieniowego Autofac sprawia, że nadaje się do aplikacji o wysokiej wydajności i skalowalnych systemów z dużymi grafami obiektów.

  4. Rozszerzalność i dostosowywanie: Rozszerzalna architektura Autofac pozwala programistom rozszerzać i dostosowywać zachowanie Autofac za pomocą niestandardowych modułów, źródeł rejestracji i komponentów oprogramowania pośredniczącego, odpowiadając na różnorodne wymagania aplikacji.

  5. Społeczność i wsparcie: Dzięki aktywnej społeczności programistów i kompleksowej dokumentacji, Autofac zapewnia doskonałe wsparcie i zasoby do nauki, rozwiązywania problemów i wnoszenia wkładu w framework.

Licencja Autofac

Autofac jest objęty licencją MIT, która jest bezpłatna do użytku w celach deweloperskich i komercyjnych.

Przedstawiamy IronPDF od Iron Software

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 1 — Strona IronPDF

IronPDF to solidna biblioteka PDF w języku C#, zaprojektowana w celu zapewnienia kompleksowego rozwiązania do zarządzania plikami PDF w projektach .NET. Niezależnie od tego, czy Twoje potrzeby dotyczą tworzenia, edycji, eksportowania, zabezpieczania, ładowania czy manipulowania dokumentami PDF, IronPDF ma narzędzia, których potrzebujesz. Oto kilka wyróżniających się funkcji i zastosowań:

Najważniejsze cechy

  • Konwersja HTML do PDF: Bezproblemowe konwertowanie treści HTML do formatu PDF. Generowanie plików PDF z HTML, MVC, ASPX i obrazów.

  • Zarządzanie plikami PDF: Dzięki ponad 50 funkcjom IronPDF umożliwia podpisywanie, edytowanie i wyodrębnianie treści z plików PDF, ułatwiając tworzenie podpisów cyfrowych i modyfikacje.

  • Obsługa wielu platform: Kompatybilny z C#, F# i VB.NET, IronPDF działa na różnych wersjach .NET, w tym .NET Core, .NET Standard i .NET Framework. Jest również dostępny dla Java, Node.js i Python.

Aby dowiedzieć się więcej o tym, jak IronPDF może zintegrować funkcje PDF z Twoimi projektami, odwiedź stronę produktu IronPDF.

Aby uzyskać kompleksowy przegląd oferty produktów Iron Software, w tym IronBarcode, IronOCR i innych, odwiedź stronę główną Iron Software.

Zgodność i środowiska

  • Wersje .NET: Obsługuje C#, VB.NET i F#.

  • Typy projektów: Nadaje się do aplikacji internetowych (Blazor i WebForms z IronPDF), komputerowych (WPF i MAUI) i konsolowych.

  • Środowiska aplikacji: Kompatybilny z Windows, Linux, Mac, Docker, Azure, AWS i innymi.

  • IDE: Płynnie integruje się z Microsoft Visual Studio i JetBrains Rider.

  • Systemy operacyjne i procesory: Działa na Windows, Mac i Linux (x64, x86, ARM).

Standardy PDF i edycja

  • Zgodność: Obsługuje różne wersje PDF (1.2–1.7), PDF/UA i PDF/A.

  • Dostosowywanie: Ustawianie właściwości, zabezpieczeń i kompresji plików PDF.

  • Metadane i struktura: Edycja metadanych, historii zmian i struktury dokumentu.

  • Szablony i ustawienia: Stosowanie szablonów stron, nagłówków, stopek i ustawień stron.

Aby uzyskać więcej informacji na temat tych funkcji i sposobu ich implementacji, odwiedź szczegółowy przewodnik po generowaniu i manipulacji PDF na oficjalnej stronie IronPDF.

Optymalizacja wydajności

  • Wydajność: Pełna obsługa wielowątkowości i asynchroniczności dla wydajnego generowania plików PDF.

  • Priorytet: Koncentruje się na dokładności, łatwości użycia i szybkości.

Przyjrzyjmy się teraz praktycznemu przykładowi z użyciem obu bibliotek.

Generowanie dokumentu PDF przy użyciu Autofac.NET i IronPDF

Najpierw stwórzmy konsolową aplikację Visual Studio.

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 2 — Tworzenie konsolowej aplikacji Visual Studio

Podaj nazwę projektu i lokalizację.

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 3 — Konfiguracja szczegółów projektu

W następnym kroku wybierz wymaganą wersję .NET i kliknij Utwórz.

Następnie zainstaluj bibliotekę IronPDF z menedżera pakietów NuGet w Visual Studio.

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 4 — Instalacja wymaganego pakietu IronPDF

Odwiedź dokumentację IronPDF, aby uzyskać więcej informacji na temat instalacji i korzystania z biblioteki IronPDF.

Zainstaluj Autofac z menedżera pakietów NuGet w Visual Studio.

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 5 — Instalacja wymaganego pakietu Autofac

Dowiedz się więcej o Autofac, odwiedzając stronę dokumentacji Autofac.

Przykład kodu: Autofac i 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
$vbLabelText   $csharpLabel

Wyjaśnienie kodu

Przeanalizujmy dostarczony fragment kodu:

  1. Konfiguracja ChromePdfRenderer:

    • Kod inicjalizuje instancję ChromePdfRenderer do renderowania plików PDF z treści HTML, co jest kluczową funkcją IronPDF.
  2. Przygotowanie treści HTML:

    • Zmienna content to ciąg znaków HTML, który zostanie użyty do wygenerowania pliku PDF.

    • Zawiera znacznik <h1> z tytułem "Demonstrate Autofac with IronPDF".
  3. Konfiguracja kontenera Autofac:

    • Kod tworzy instancję ContainerBuilder o nazwie builder.

    • Jest to pierwszy krok w konfiguracji kontenera Autofac do wstrzykiwania zależności.
  4. Ręczna rejestracja typów:

    • Rejestruje typ MyService jako implementację interfejsu IMyService.

    • Pozwala to Autofac na rozwiązywanie zależności w razie potrzeby.
  5. Rejestracja typów za pomocą skanowania zestawów:

    • Skanuje zestaw zawierający typ AutoFac.

    • Rejestruje typy, których nazwy kończą się na "Repository", jako implementacje odpowiednich interfejsów.
  6. Rejestracja modułów:

    • Rejestruje moduł o nazwie MyModule.

    • Moduły umożliwiają grupowanie powiązanych rejestracji.
  7. Budowanie kontenera:

    • Kontener jest budowany z zarejestrowanych komponentów przy użyciu metody builder.Build().
  8. Rozwiązywanie zależności:

    • W zakresie cyklu życia (using (var scope = container.BeginLifetimeScope())), rozwiązywana jest instancja IMyService.

    • Na rozwiązanej usłudze wywoływana jest metoda DoSomething.
  9. Generowanie pliku PDF:

    • Plik PDF jest tworzony z treści przy użyciu ChromePdfRenderer.

    • Powstały plik PDF jest zapisywany jako "autofac.pdf".

Wynik

Autofac .NET 6 (Jak to działa dla programistów): Rysunek 6 — Wyjściowy plik PDF z poprzedniego przykładu kodu

Licencja IronPDF

IronPDF wymaga klucza licencyjnego. Umieść klucz licencyjny w pliku appSettings.json, jak pokazano poniżej.

{
  "IronPdf.License.LicenseKey": "The Key Here"
}

Często Zadawane Pytania

Czym jest Autofac i jak działa w .NET 6?

Autofac to kontener wstrzykiwania zależności (DI) dla platformy .NET, umożliwiający efektywne zarządzanie zależnościami dzięki funkcjom takim jak tworzenie kontenerów i rejestracja komponentów. W platformie .NET 6 Autofac nadal zwiększa skalowalność i łatwość utrzymania aplikacji.

Jak można wykorzystać Autofac w tworzeniu nowoczesnych aplikacji internetowych?

Autofac płynnie integruje się z ASP.NET Core i .NET Core, ułatwiając tworzenie nowoczesnych aplikacji internetowych poprzez zapewnienie solidnego wsparcia dla wstrzykiwania zależności i elastycznych systemów modułowych.

Jakie są zalety korzystania z Autofac w aplikacjach .NET?

Autofac oferuje takie korzyści, jak elastyczna rejestracja komponentów, zarządzanie cyklem życia, automatyczne rozwiązywanie zależności oraz obsługa przechwytywania i programowania zorientowanego aspektowo (AOP), co zwiększa skalowalność i testowalność aplikacji .NET.

Jak mogę generować pliki PDF w aplikacji .NET?

W aplikacji .NET można generować pliki PDF za pomocą IronPDF, biblioteki C#, która udostępnia metody programowego tworzenia, edycji i zarządzania dokumentami PDF.

Czy Autofac można zintegrować z biblioteką do generowania plików PDF w .NET?

Tak, Autofac można zintegrować z biblioteką do generowania plików PDF, taką jak IronPDF, poprzez skonfigurowanie kontenera wstrzykiwania zależności w celu zarządzania usługami biblioteki PDF w ramach aplikacji .NET.

Jaka jest rola kontenerów wstrzykiwania zależności, takich jak Autofac, w programowaniu w środowisku .NET?

Kontenery wstrzykiwania zależności, takie jak Autofac, ułatwiają stosowanie zasady odwrócenia kontroli (IoC) w programowaniu .NET poprzez zarządzanie zależnościami, co prowadzi do tworzenia aplikacji bardziej skalowalnych, łatwiejszych w utrzymaniu i testowaniu.

W jaki sposób Autofac wspiera automatyczne rozwiązywanie zależności?

Autofac obsługuje automatyczne rozwiązywanie zależności, umożliwiając programistom rejestrowanie komponentów i rozwiązywanie ich zależności za pośrednictwem swojego kontenera, co usprawnia zarządzanie komponentami i zwiększa skalowalność aplikacji.

Jakie są kluczowe funkcje biblioteki C# do obsługi plików PDF dla platformy .NET?

Kluczowe funkcje biblioteki C# do obsługi plików PDF, takiej jak IronPDF, obejmują konwersję HTML do PDF, obsługę wielu platform oraz kompatybilność z różnymi wersjami .NET, co umożliwia kompleksowe tworzenie dokumentów PDF i zarządzanie nimi.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie