目的

批次註冊

建立新專案

選擇ASP.NET Core Web API專案範本,並執行下一步 步驟1

設定新的專案

命名你的專案名稱,並選擇專案要存放的位置。 步驟2

其他資訊

直接進行下一步 步驟3

NuGet加入套件

步驟4

新增類別檔

新增之後需要來描述要批次注入的規則

  • 加入前 步驟5-1
  • 加入後 步驟5-2

並且繼承autofac的類別Module 步驟5-3

編輯Program.cs檔案

//初始化並建立一個實例
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//註冊autofac這個容器
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutofacModuleRegister()));

步驟5-1 有繼承autofac的類別Module 步驟5-2

新增資料夾

新增下圖兩個資料夾 步驟6

新增類別檔

此次的目的是要可以進行批次注入,所以檔名結尾都需要包含Service,做批次注入時可以辨識

  • 在Services資料夾底下加入類別檔案,名稱為TestService

步驟7-1

  • 在Interface資料夾底下加入介面檔案,名稱為ITest

步驟7-2

  • ITest.cs寫入程式
namespace AutoFacExample.Services.Interface {
  public interface ITest {
    public string GetName(string id);
  }
}

步驟7-3

  • TestService.cs寫入程式 繼承介面後寫上與介面相同的方法
using AutoFacExample.Services.Interface;

namespace AutoFacExample.Services {
  public class TestService : ITest {
    public string GetName(string id) {
      return $"{id}:Bill";
    }
  }
}

步驟7-4

AutofacModuleRegister執行批次註冊

    protected override void Load(ContainerBuilder builder) {
    //RegisterAssemblyTypes => 註冊所有集合
    //Where(t => t.Name.EndsWith("Service")) => 找出所有Service結尾的檔案
    //AsImplementedInterfaces => 找到Service後註冊到其所繼承的介面 
      builder.RegisterAssemblyTypes(typeof(Program).Assembly)
            .Where(t => t.Name.EndsWith("Service"))
            .AsImplementedInterfaces();
    }

步驟8

新增測試用controller

步驟9-1 步驟9-2

  • TestController.cs寫入程式
using AutoFacExample.Services.Interface;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace AutoFacExample.Controllers {
  [Route("api/[controller]")]
  [ApiController]
  public class TestController : ControllerBase {
    //為隱私修飾詞並且唯讀
    private readonly ITest _test;
    //在建構子時注入需要使用的服務
    public TestController(ITest test) {
      _test = test;
    }
    [HttpGet("GetName")]
    public string Get(string id) { 
    //使用注入的服務
    return _test.GetName(id);
    }
  }
}

注入的服務都是使用介面,目的是之後方便抽換,才可以進行測試 命名原則都會加一個底線代表全域變數 步驟9-3

執行結果

最終確認程式是可執行,就沒有問題了。 步驟10-1

參考

.net6註冊autofac說明文件 參考文件 參考文件 參考文件

範例檔

GitHub