AutoFac的實現,與應用
- Autofac是一款IOC框架,比較於其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級效能上非常高,我們可以批次實現注入
- 程式碼的實現
- 首先我們需要安裝兩個元件,可以在 nuget 中安裝
-
我們要給類庫去繼承 Autofac.Module,他是 Autofac 中的一個重要概念,用於實現依賴注入容器的模組化。在 Autofac 中,Module 是一個類,用於封裝註冊元件的邏輯。透過繼承
Autofac.Module
類並重寫其中的方法,可以方便地組織和管理元件的註冊。 -
要重寫 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());
});