.NET ヘルプ

Autofac .NET 6(開発者向けの動作方法)

更新済み 7月 1, 2024
共有:

.NET開発の分野では、依存関係を効率的に管理することが、スケーラブルで保守可能、かつテストしやすいアプリケーションを構築する上で非常に重要です。 依存性注入 (DI) これらの目標を達成する上で、コンテナは制御の反転を容易にすることにより、重要な役割を果たします。 (IoC) 原則。 多数の一般的なホスティングメカニズムライブラリが利用可能である中で、Autofacは.NETのための機能豊富で拡張可能なフレームワークとして際立っています。

この記事では、Autofac .NET 6を探求する旅に出かけ、その特徴と利点を解き明かしながら、実際の使用例を紹介します。 この記事の後半では、Iron Software の PDF 生成ライブラリである IronPDF について学びます。 Autofac.NETとIronPDFを一緒に使用するユースケースも紹介します。

Autofac .NETの理解

Autofacは、.NET向けのオープンソースのIoCコンテナで、ウェブAPIのようなアプリにおける依存関係注入とコンポーネント登録の包括的なサポートを提供します。Nicholas Blumhardtによって開発され、献身的なコミュニティによって維持されているAutofacは、オブジェクトのライフタイムを管理し、依存関係を解決し、アプリケーションコンポーネントを構築するための堅牢かつ柔軟なソリューションを提供します。

Autofacの特徴

  1. コンテナの構築とコンポーネントの登録:コンポーネントをスタートアップクラスに登録することで、Autofacを使用してコンテナを構築できます。 コンポーネントは、ラムダ、型、または事前構築されたインスタンスを使用して登録できます。
    public class Startup
    {
        public void ConfigureContainer()
        {
            var builder = new ContainerBuilder(); // host sub property builder
            builder.RegisterInstance(new TaskRepository()).As<ITaskRepository>();
            builder.RegisterType<TaskController>();
            builder.Register(c => new LogManager(DateTime.Now)).As<ILogger>();
            // Scan an assembly for components
            builder.RegisterAssemblyTypes(myAssembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            var container = builder.Build();
        }
    }
    public class Startup
    {
        public void ConfigureContainer()
        {
            var builder = new ContainerBuilder(); // host sub property builder
            builder.RegisterInstance(new TaskRepository()).As<ITaskRepository>();
            builder.RegisterType<TaskController>();
            builder.Register(c => new LogManager(DateTime.Now)).As<ILogger>();
            // Scan an assembly for components
            builder.RegisterAssemblyTypes(myAssembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            var container = builder.Build();
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 依存関係を明示する: Autofacはコンストラクタパラメータをインジェクトし、プロパティインジェクションおよびメソッドインジェクションを処理することができます。
    public class TaskController
    {
        private ITaskRepository _repository;
        private ILogger _logger;

        public TaskController(ITaskRepository repository, ILogger logger)
        {
            this._repository = repository;
            this._logger = logger;
        }
    }
    public class TaskController
    {
        private ITaskRepository _repository;
        private ILogger _logger;

        public TaskController(ITaskRepository repository, ILogger logger)
        {
            this._repository = repository;
            this._logger = logger;
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 柔軟なモジュールシステム:Autofacモジュールは、XML構成とコードベースの登録のバランスを取ります。 コード内で複雑な登録を指定したり、XMLを使用してデプロイメント時の動作を変更したりできます。
    public class CarTransportModule : Module
    {
        public bool ObeySpeedLimit { get; set; }

        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<Car>().As<IVehicle>();
            if (ObeySpeedLimit)
                builder.RegisterType<SaneDriver>().As<IDriver>();
            else
                builder.RegisterType<CrazyDriver>().As<IDriver>();
        }
    }
    public class CarTransportModule : Module
    {
        public bool ObeySpeedLimit { get; set; }

        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<Car>().As<IVehicle>();
            if (ObeySpeedLimit)
                builder.RegisterType<SaneDriver>().As<IDriver>();
            else
                builder.RegisterType<CrazyDriver>().As<IDriver>();
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. シンプルな拡張ポイント: Autofacは、コンポーネントのアクティベーションやリリースをカスタマイズするためのアクティベーションイベントを提供します。
    var builder = new ContainerBuilder();
    builder.RegisterType<Listener>().As<IListener>().OnActivated(e => e.Instance.StartListening());
    builder.RegisterType<Processor>().OnActivating(e => e.Instance.Initialize());
    var container = builder.Build();
    var builder = new ContainerBuilder();
    builder.RegisterType<Listener>().As<IListener>().OnActivated(e => e.Instance.StartListening());
    builder.RegisterType<Processor>().OnActivating(e => e.Instance.Initialize());
    var container = builder.Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Autofac.NET の主な機能

  1. 柔軟なコンポーネント登録: Autofacは、手動での登録、アセンブリスキャン、属性ベースの登録など、さまざまな登録手法を使用して開発者がコンポーネントを登録できるようにします。 この柔軟性により、コンポーネントのインスタンス化と構成に対してきめ細かい制御が可能になります。

  2. ライフタイム管理: Autofacは、シングルトン、依存関係ごとのインスタンス、ライフタイムスコープごとのインスタンス、リクエストごとのインスタンスを含む、さまざまなオブジェクトのライフタイムスコープをサポートします。この詳細なオブジェクトライフタイムの制御により、リソースの効率的な利用が確保され、長時間実行されるアプリケーションでのメモリリークが防止されます。

  3. 自動依存関係解決: Autofacは登録されたコンポーネントの登録情報とその依存関係に基づいて、依存関係を自動的に解決します。 このオートワイヤリングは、複雑なオブジェクトグラフの設定を簡素化し、コンポーネント間の疎結合を促進します。

  4. モジュール構成: Autofacは、開発者がモジュールを使用してコンポーネントの登録を整理およびカプセル化することを可能にします。 モジュールは関連する登録の論理的なコンテナとして機能し、複数のコンポーネントを持つ大規模なアプリケーションの管理と保守を容易にします。

  5. インターセプションとAOP:Autofacはインターセプションとアスペクト指向プログラミングのサポートを提供します。 (アスペクト指向プログラミング(AOP)) インターセプション拡張機能を通して。 インターセプションを使用すると、開発者はログ記録、キャッシュ、およびセキュリティなどの横断的関心事を、コンポーネントの実装を変更することなく適用できます。

  6. ASP.NET Core および .NET Core の統合: Autofac は .NET Core および ASP.NET Core にシームレスに統合され、最新のウェブアプリケーションおよびマイクロサービスにおける依存性注入に対して一流のサポートを提供します。 これは、.NETエコシステムとの互換性と相互運用性を確保するために、組み込みのサービスプロバイダーの抽象化を活用しています。

Autofac.NETの実用例

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
VB   C#

このセクションでは、依存性注入のためのAutofac.NETの実用的な実装を示しました。 手動登録からアセンブリスキャンおよびモジュールベースの登録に至るまで、Autofac が依存関係の管理に提供する柔軟性を示しました。 これらの技術を活用することで、開発者はアプリケーションの依存性注入プロセスを効率化し、保守性とスケーラビリティを向上させることができます。

Autofac.NETの使用のメリット

  1. シンプルさと柔軟性: Autofacは、コンポーネントの登録と解決のためのシンプルで直感的なAPIを提供しており、依存性注入の実装と保守を簡単にします。

  2. テスト容易性と保守性: 疎結合と依存関係の逆転を促進することにより、Autofacは.NETアプリケーションのテスト容易性と保守性を向上させ、ユニットテストやリファクタリングを容易にします。

  3. パフォーマンスとスケーラビリティ: Autofac の軽量で効率的なランタイムパフォーマンスは、高性能アプリケーションおよび大規模なオブジェクトグラフを持つスケーラブルなシステムに適しています。

  4. 拡張性とカスタマイズ: Autofacの拡張可能なアーキテクチャは、開発者がカスタムモジュール、登録ソース、およびミドルウェアコンポーネントを通じてAutofacの動作を拡張およびカスタマイズできるようにし、多様なアプリケーション要件に対応します。

  5. コミュニティとサポート: 活発な開発者コミュニティと包括的なドキュメントを備えたAutofacは、フレームワークの学習、トラブルシューティング、貢献に対して優れたサポートとリソースを提供します。

Autofac ライセンス

Autofacは、開発および商業目的で無料で使用できるMITライセンスが付属しています。

Iron SoftwareからのIronPDFをご紹介します。

Autofac .NET 6(開発者向けの動作方法):図1 - IronPDFのウェブページ

IronPDFは、.NETプロジェクトでPDFを管理するための包括的なソリューションを提供するように設計された堅牢なC# PDFライブラリです。 PDFドキュメントの作成、編集、エクスポート、セキュリティ、ロード、または操作が必要な場合でも、IronPDFには必要なツールが揃っています。 以下はその際立った機能と応用例です:

主な機能

  • HTMLからPDFへの変換:簡単にHTMLコンテンツをPDFに変換します。 HTML、MVC、ASPX、および画像からPDFを生成。
  • PDF管理: 50以上の機能を備えたIronPDFは、PDFに署名し、編集し、コンテンツを抽出することができ、デジタル署名や変更が容易になります。

  • クロスプラットフォーム対応: IronPDFはC#、F#、およびVB.NETと互換性があり、.NET Core、.NET Standard、.NET Frameworkを含むさまざまな.NETバージョンで実行されます。 それはJava、Node.js、およびPythonでも利用可能です。

互換性と環境

  • .NETバージョン:C#、VB.NET、およびF#をサポートします。
  • プロジェクトのタイプ: ウェブに適している (Blazor & WebForms (ブレイザー & ウェブフォーム))デスクトップ (WPF & MAUI)およびコンソールアプリケーション。
  • アプリケーション環境: Windows、Linux、Mac、Docker、Azure、AWS などに対応。
  • IDE: Microsoft Visual StudioおよびJetBrains Riderとシームレスに統合します。

  • OS & プロセッサ: Windows、Mac、およびLinuxで動作します (x64、x86、ARM).

PDFの標準と編集

  • 互換性: 各種PDFバージョンをサポート (1.2 - 1.7), PDF/UA、およびPDF/A.
  • カスタマイズ: PDFファイルのプロパティ、セキュリティ、および圧縮を設定します。
  • メタデータと構造: メタデータ、履歴の編集、ドキュメントの構造を編集します。
  • テンプレートと設定: ページテンプレート、ヘッダー、フッター、およびページ設定を適用します。

パフォーマンス最適化

  • 効率:効率的なPDF生成のための完全なマルチスレッドおよび非同期サポート。
  • 優先事項: 正確さ、使いやすさ、および速度に重点を置いています。

    では、これらの2つのライブラリを使用した実際の例を見てみましょう。

Autofac.NETとIronPDFを使用してPDFドキュメントを生成する

まずは、Visual Studio コンソール アプリケーションを作成しましょう。

Autofac .NET 6(開発者向けの仕組み):図 2 - Visual Studio コンソール アプリの作成

プロジェクト名と場所を提供してください。

Autofac .NET 6(開発者向けの動作方法):図3 - プロジェクト詳細の設定

次のステップとして、必要な.NETバージョンを選択し、「作成」をクリックしてください。

次に、Visual Studio パッケージマネージャーから NuGet パッケージで IronPDF ライブラリをインストールします。

Autofac .NET 6 (開発者向けの仕組み): 図4 - 必要なIronPDFパッケージのインストール

Visual Studio パッケージ マネージャーから NuGet パッケージとして Autofac をインストール

Autofac .NET 6(開発者向けの動作方法):図 5 - 必要なAutofacパッケージのインストール

コード例:Autofac と 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
VB   C#

コードの説明

では、提供していただいたコードスニペットを分解してみましょう。

  1. ChromePdfRenderer セットアップ

    • コードは、PDFファイルをレンダリングするために ChromePdfRenderer インスタンスを初期化します。
  2. HTMLコンテンツの準備:

    • content 変数は、PDF を生成するために使用される HTML 文字列です。

      • 以下の内容を日本語に翻訳してください:

<h1> タグには「IronPDFを使ったAutofacのデモンストレーション」というタイトルが含まれています。

  1. Autofacコンテナのセットアップ:

    • コードは ContainerBuilder という名前のインスタンス builder を作成します。

    • これは依存性注入のためにAutofacコンテナを設定する最初のステップです。
  2. タイプを手動で登録する:

    • それは、IMyServiceインターフェースの実装として、MyService型を登録します。

    • これにより、Autofacは必要に応じて依存関係を解決することができます。
  3. アセンブリスキャンを使用してタイプを登録する

    • アセンブリに含まれるAutoFacタイプをスキャンします。

    • "Repository"で終わる名前を持つ型を、それに対応するインターフェースの実装として登録します。
  4. モジュールの登録:

    • それは「MyModule」と呼ばれるモジュールを登録します。

    • モジュールは関連する登録をグループ化することを可能にします。
  5. コンテナの構築

    • コンテナは、builder.Build を使用して登録されたコンポーネントから作成されます。()メソッド
  6. 依存関係の解決:

    • ライフタイムスコープ内 (using (var scope = container.BeginLifetimeScope())もちろん、英語のテキストを教えていただけますでしょうか?)それはIMyService` のインスタンスを解決します。

    • 解決されたサービスで DoSomething メソッドが呼び出されます。
  7. PDF生成

    • コンテンツから ChromePdfRenderer を使用してPDFが作成されます。

    • 結果として生成されたPDFは「autofac.pdf」として保存されます。

出力

Autofac .NET 6(開発者向けの使い方):図6 - 前のコード例から出力されたPDF

IronPDFライセンス

IronPDFにはライセンスキーが必要です。 以下に示すように、appSettings.jsonファイルにライセンスキーを配置してください。

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

結論

結論として、Autofac.NETは、.NETのための堅牢で機能豊富な依存性注入コンテナとして際立っており、開発者がモジュール化、保守可能、拡張可能なアプリケーションを構築するのを支援します。 デスクトップアプリケーション、ウェブサービス、またはクラウドネイティブソリューションを開発している場合でも、Autofac は依存関係の管理と .NET 開発におけるベストプラクティスの促進に信頼性のある基盤を提供します。

IronPDFは、PDFドキュメントを生成、編集、および読み取るための多機能かつ豊富な機能を備えたライブラリです。 Iron SoftwareのIronPDFライブラリを使用してPDFドキュメントの読み取りと生成を行うことで、開発者は現代的なアプリケーションを開発するための高度なスキルを身につけることができます。

< 以前
OpenTelemetry .NET(開発者向けの仕組み)
次へ >
Papercut SMTP C#(開発者向けの動作方法)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >