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 artykułe 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.

Skorzystaj z dodatkowych informacji i praktycznych przykladow uzycia Autofac w rzeczywistych przypadkach przechodzac na oficjalna strone Iron Software, gdzie znajdziesz kompletny zestaw produktow jak IronOCR i IronXL, ktore integruja sie bezproblemowo z Autofac i wzbogacaja proces tworzenia w .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 konstruktóra, 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 cechy Autofac.NET

  1. Elastyczna rejestracja komponentow: Autofac pozwala deweloperom rejestrowac komponenty uzywajac roznych technik rejestracji, w tym recznej rejestracji, skanowania poziomow, oraz rejestracji opartej na atrybutach. Ta elastycznosc pozwala na drobiazgowa kontrole nad tworzeniem i konfiguracja komponentow.

  2. Zarzadzanie zywotnoscia: Autofac wspiera rozne zakresy zywotnosci obiektow, w tym singleton, instancja na zaleznosc, instancja na zakres zywotnosci oraz instancja na zapytanie. Ta szczegolowa kontrola nad zywotnoscia obiektow zapewnia efektywne uzycie zasobow i zapobiega wyciekom pamieci w dlugo dzialajacych aplikacjach.

  3. Automatyczne rozwiazywanie zaleznosci: Autofac automatycznie rozwiazuje zaleznosci na podstawie zarejestrowanych rejestracji komponentow oraz ich zaleznosci. To automatyczne przewijanie upraszcza konfiguracje zlozonych grafow obiektow i promuje luźne powiązania między komponentami.

  4. Kompozycja modułów: Autofac pozwala deweloperom organizowac i kapsulowac rejestracje komponentow za pomoca modulu. Moduly sluza jako logiczne kontenery dla powiazanych rejestracji, co ułatwia zarządzanie i utrzymywanie dużych aplikacji z wieloma komponentami.

  5. Interception i AOP: Autofac wspiera interception i programowanie zorientowane na aspekty (AOP) dzięki swojej rozszerzonej funkcjonalności. Dzięki intercepcji, deweloperzy mogą stosować koncerny przeciwdziałające, takie jak logowanie, buforowanie i bezpieczeństwo do komponentów bez modyfikacji ich implementacji.

  6. Integracja z ASP.NET Core i .NET Core: Autofac bezproblemowo integruje się z .NET Core i ASP.NET Core, oferując pierwszorzędne wsparcie dla wstrzykiwania zależności we współczesnych aplikacjach webowych i mikrousługach. Wykorzystuje wbudowany widok dostawcy usług do zapewnienia kompatybilności i interoperacyjności z ekosystemem .NET.

Praktyczne przyklady z Autofac.NET

Zbadajmy kilka praktycznych przykladow, aby zilustrowac zastosowanie 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 przedstawiliśmy praktyczną implementację Autofac.NET dla wstrzykiwania zależności. Od rejestracji manualnej po skanowanie poziomów i rejestracji bazującej na module, pokazaliśmy elastyczność Autofac w zarządzaniu zależnościami. Wykorzystując te techniki, deweloperzy mogą usprawnić proces wstrzykiwania zależności w swoich aplikacjach, zwiększając ich konserwację i skalowalność.

Więcej informacji na temat tego, jak produkty Iron Software mogą zintegrować się z aplikacjami .NET, aby dalej usprawnić i rozszerzyć funkcjonalność, znajdziesz w dokumentacji IronPDF, gdzie dowiesz się, jak generować i edytować dokumenty PDF programowo, lub odwiedzasz stronę internetową Iron Software, aby odkryć szeroki wachlarz potężnych bibliotek .NET, takich jak IronBarcode do odczytywania i pisania kodów kreskowych, oraz IronOCR do zaawansowanego rozpoznawania optycznego znaków.

Zalety używania Autofac.NET

  1. Prostota i elastyczność: Autofac oferuje prosty i intuicyjny interfejs API do rejestrowania i rozwiązywania komponentów, co czyni wstrzykiwanie zależności łatwym do implementacji i konserwacji.

  2. Testowanie i utrzymywanie: Poprzez promowanie luźnego powiązania i inwersji zależności, Autofac zwiększa testowalność i utrzymanie aplikacji .NET, umożliwiając łatwe testowanie jednostek i refaktorowanie.

  3. Wydajność i skalowalność: Lekka i wydajna wydajność czasu działania Autofac sprawia, że jest ona odpowiednia dla aplikacji o wysokiej wydajności i skalowalnych systemów z dużymi drzewiastymi obiektami.

  4. Rozszerzalność i personalizacja: Rozszerzalna architektura Autofac pozwala deweloperom rozszerzać i dostosowywać zachowanie Autofac poprzez własne moduły, źródła rejestracji i komponenty pośredniczące, spełniając różnorodne wymagania aplikacji.

  5. Społeczność i wsparcie: Dzieki aktywnej społeczności deweloperów i szczegółowej dokumentacji, Autofac oferuje doskonałe wsparcie i zasoby do nauki, rozwiązywania problemów i przyczyniania się do ramek.

Licencja Autofac

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

Przedstawienie IronPDF od Iron Software

Autofac .NET 6 (Jak to działa dla deweloperów): Rysunek 1 - Strona internetowa IronPDF

IronPDF jest solidną biblioteką PDF dla C#, zaprojektowaną, aby zapewnić kompleksowe rozwiązanie do zarządzania PDF w projektach .NET. Niezależnie od Twoich potrzeb, które obejmują tworzenie, edytowanie, eksportowanie, zabezpieczanie, ładowanie lub manipulowanie dokumentami PDF, IronPDF ma narzędzia, których potrzebujesz. Oto niektóre z jego wyróżniających się funkcji i zastosowań:

Najważniejsze cechy

  • Konwersja HTML do PDF: Łatwo konwertuj zawartość HTML do PDF. Generuj PDF-y z HTML, MVC, ASPX i obrazow.

  • Zarządzanie PDF: Ponad 50 funkcji, IronPDF pozwala na podpisywanie, edytowanie i ekstrakcję treści z PDF-ow, co czyni podpisy cyfrowe i modyfikacje łatwymi.

  • Wsparcie wieloplatformowe: 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 także dostępny na Java, Node.js i Python.

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

Dla kompleksowego przeglądu ofert produktów Iron Software, w tym IronBarcode, IronOCR i innych, odwiedź stronę główną Iron Software.

Kompatybilność i środowiska

  • Wersje .NET: Wspiera C#, VB.NET i F#.

  • Typy projektów: Odpowiednie dla aplikacji webowych (Blazor & WebForms z IronPDF), desktopowych (WPF & MAUI) i konsolowych.

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

  • IDEs: Seamlessly integrates with Microsoft Visual Studio and JetBrains Rider.

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

Standardy PDF i edycja

  • Kompatybilność: Wspiera różnorodne wersje PDF (1.2 - 1.7), PDF/UA i PDF/A.

  • Dostosowywanie: Ustaw właściwości, bezpieczeństwo i kompresję dla plików PDF.

  • Metadane i struktura: Edytuj metadane, historię zmian i strukturę dokumentu.

  • Szkielet i ustawienia: Zastosuj szkielet stron, nagłówki, stopki i ustawienia stron.

Więcej informacji na temat tych funkcji i sposobu ich wdrażania znajdziesz w szczegółowym przewodniku generowania i manipulacji PDF na oficjalnej stronie IronPDF.

Optymalizacja wydajności

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

  • Priorytet: Skupia się na dokładności, łatwości użycia i prędkości.

Teraz zobaczmy praktyczny przykład z tymi dwiema bibliotekami.

Generowanie dokumentu PDF za pomocą Autofac.NET i IronPDF

Na początek, stwórzmy aplikację konsolową Visual Studio

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

Podaj nazwę projektu i lokalizację.

Autofac .NET 6 (Jak to działa dla deweloperów): Rysunek 3 - Konfigurowanie szczegółów projektu

Na następnym etapie, wybierz wymaganą wersję .NET i kliknij Utwórz.

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

Autofac .NET 6 (Jak to działa dla deweloperów): Rysunek 4 - Instalacja niezbędnego pakietu IronPDF

Odwiedź Dokumentację IronPDF, aby uzyskać szczegółowe informacje na temat instalacji i korzystania z biblioteki IronPDF.

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

Autofac .NET 6 (Jak to działa dla deweloperów): Rysunek 5 - Instalacja niezbędnego pakietu Autofac

Dowiedz się więcej o Autofac, przechodząc na Stronę z dokumentacją Autofac.

Przykład Kod: 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

Rozłóżmy fragment kodu, który dostarczyłeś:

  1. Konfiguracja ChromePdfRenderer:
  • Kod inicjalizuje instancję ChromePdfRenderer do renderowania PDF-ów z treści HTML, kluczową funkcję IronPDF.
  1. Przygotowanie zawartości HTML:
  • Zmienna content jest ciągiem HTML, który będzie użyty do wygenerowania PDF.

  • Zawiera znacznik <h1> z tytułem "Demonstracja Autofac z IronPDF".
  1. Konfiguracja Kontenera Autofac:
  • Kod tworzy instancję ContainerBuilder nazwaną builder.

    • Jest to pierwszy krok w konfiguracji kontenera Autofac do wstrzykiwania zależności.
  1. Rejestrowanie typów ręcznie:
  • Rejestruje typ MyService jako implementację interfejsu IMyService.

    • To pozwala na rozwiązywanie zależności przez Autofac, gdy jest to potrzebne.
  1. Rejestrowanie typów za pomocą skanowania poziomów:
  • Skanuje zestaw zawierający typ AutoFac.

    • Rejestruje typy, których nazwy kończą się na "Repository" jako implementacje odpowiednich interfejsów.
  1. Rejestrowanie modułów:
  • Rejestruje moduł o nazwie MyModule.

    • Moduły pozwalają na grupowanie powiązanych rejestracji.
  1. Budowanie Kontenera:
  • Kontener jest budowany z zarejestrowanych komponentów przy użyciu metody builder.Build().
  1. Rozwiązywanie Zaleznosci:
  • Wewnątrz zakresu życia (using (var scope = container.BeginLifetimeScope())) rozwiązuje instancję IMyService.

  • Metoda DoSomething jest wywoływana na rozwiązanej usłudze.
  1. Generowanie PDF:
  • PDF jest tworzony z treści przy użyciu ChromePdfRenderer.

    • Wynikowy PDF jest zapisywany jako "autofac.pdf".

Wynik

Autofac .NET 6 (Jak to działa dla deweloperów): Rysunek 6 - Wynikowy 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 aspektówo (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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie