AutoFac

幕雪發表於2024-03-11

AutoFac的實現,與應用

  1. Autofac是一款IOC框架,比較於其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級效能上非常高,我們可以批次實現注入
  2. 程式碼的實現
    1. 首先我們需要安裝兩個元件,可以在 nuget 中安裝

  1. 我們要給類庫去繼承 Autofac.Module,他是 Autofac 中的一個重要概念,用於實現依賴注入容器的模組化。在 Autofac 中,Module 是一個類,用於封裝註冊元件的邏輯。透過繼承 Autofac.Module 類並重寫其中的方法,可以方便地組織和管理元件的註冊。

  2. 要重寫 Load 的方法

    protected override void Load(ContainerBuilder builder)
    {
        // 透過反射載入 RodeInfor.Repository 程式集
        var Repository = Assembly.Load("RodeInfor.Repository");
    
        // 透過反射載入 RodeInfor.Services 程式集
        var Services = Assembly.Load("RodeInfor.Services");
    
        // 將 Repository 程式集中以 "Repository" 結尾的類註冊到 Autofac 容器中,並自動實現其介面
        builder.RegisterAssemblyTypes(Repository)
               .Where(c => c.Name.EndsWith("Repository")) // 篩選類名以 "Repository" 結尾的類
               .AsImplementedInterfaces(); // 註冊實現的介面
    
        // 將 Services 程式集中以 "Services" 結尾的類註冊到 Autofac 容器中,並自動實現其介面
        builder.RegisterAssemblyTypes(Services)
               .Where(c => c.Name.EndsWith("Services")) // 篩選類名以 "Services" 結尾的類
               .AsImplementedInterfaces(); // 註冊實現的介面
    
        // 註冊 TokenHrep 型別到容器中
        builder.RegisterType(typeof(TokenHrep));
    
        // 註冊 JwtSecurityTokenHandler 型別到容器中
        builder.RegisterType(typeof(JwtSecurityTokenHandler));
    
        // 呼叫基類的 Load 方法,將註冊的元件載入到容器中
        base.Load(builder);
    }
    

當然重中之重還是要注入到 Program

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder =>
{
    //RbacModule自己建立的Module類
    builder.RegisterModule(new RbacFac());
});

本篇結束,感謝閱讀,下一期聊一聊 AutoFac

相關文章