项目
// [文档SEO优化]
{
    "描述": "学习如何将Autofac与ABP框架集成,利用其高级依赖注入功能,轻松增强.NET应用程序的开发能力。"
}

Autofac集成指南

Autofac 是.NET生态中最常用的依赖注入框架之一。相比.NET Core自带的DI容器,它提供了动态代理和属性注入等高级特性。

安装Autofac集成包

所有 启动模板 和示例项目都已默认集成Autofac。因此在大多数情况下,您无需手动安装此包。

若未使用启动模板,可通过 ABP CLI 工具为项目添加集成包。在包含项目.csproj文件的目录下执行以下命令(建议安装在可执行/Web项目中):

abp add-package Volo.Abp.Autofac

如尚未安装 ABP CLI,请先 完成安装 。其他安装方式请参阅 包详情页面

最后,根据应用类型配置AbpApplicationCreationOptions,将默认依赖注入服务替换为Autofac实现。

ASP.NET Core 应用程序

Program.cs文件中调用UseAutofac()方法:

public class Program
{
    public static int Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    internal static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseAutofac(); //集成Autofac!
}

若使用静态WebApplication类,可按以下方式调用扩展方法:

public class Program
{
    public async static Task Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        builder.Host.UseAutofac(); // 集成Autofac!
        await builder.AddApplicationAsync<MyProjectNameWebModule>();
        var app = builder.Build();
        await app.InitializeApplicationAsync();
        await app.RunAsync();
    }
}

控制台应用程序

AbpApplicationFactory.Create选项中调用UseAutofac()方法:

using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;

namespace AbpConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var application = AbpApplicationFactory.Create<AppModule>(options =>
            {
                options.UseAutofac(); //Autofac集成
            }))
            {
                //...
            }
        }
    }
}

使用Autofac注册API

如需使用Autofac高级 注册API ,需获取ContainerBuilder对象。Volo.Abp.Autofac 包提供了IServiceCollection.GetContainerBuilder()扩展方法。

示例:在 模块类ConfigureServices方法中获取ContainerBuilder

public override void ConfigureServices(ServiceConfigurationContext context)
{
    var containerBuilder = context.Services.GetContainerBuilder();
    containerBuilder.RegisterType<MyService>(); // 使用Autofac注册API
}

需在要使用Autofac API的项目中安装 Volo.Abp.Autofac NuGet包。

在本文档中