當前位置: 妍妍網 > 碼農

盤點5個常用的.Net依賴註入框架!

2024-04-28碼農

盤點5個常用的依賴註入框架,特別是前面2個。

1、Microsoft.Extensions.DependencyInjection

這是.Net Core框架本身內建整合的,我們只需引入 Microsoft.Extensions.DependencyInjection,就可以直接使用。

using DependencyInjectionSample.Interfaces;using DependencyInjectionSample.Services;var builder = WebApplication.CreateBuilder();builder.Services.AddRazorPages();builder.Services.AddScoped<IMyDependency, MyDependency>();var app = builder.Build();

2、AutoFac

https://github.com/autofac/Autofac

Star: 4.4K

一個高級的依賴註入(DI)框架,用於.NET應用程式。它允許開發者以一種型別安全、聲明式的方式編寫程式碼,從而實作控制反轉(IoC)。Autofac旨在提供強大的功能,同時保持易用性和靈活性。

var builder = WebApplication.CreateBuilder();// 註冊元件builder.RegisterType<MyService>().As<IMyService>();builder.RegisterType<AnotherService>().As<IAnotherService>().InstancePerLifetimeScope();// 構建容器var app= builder.Build();// 解析服務var myService = app.Resolve<IMyService>();

3、 Ninject

https://github.com/ninject/Ninject

Star: 2.7K

一個為 .NET 應用程式設計的閃電般快速、超輕量級的依賴註入器。它幫助你將應用程式分割成一系列松耦合、高內聚的元件,然後以靈活的方式將它們重新組合在一起。透過使用 Ninject 來支持你的軟體架構,你的程式碼將變得更容易編寫、重用、測試和修改。

public classWarriorModule : NinjectModule{publicoverridevoidLoad() {this.Bind<IWeapon>().To<Sword>(); }}

4、SimpleInjector

https://github.com/simpleinjector/SimpleInjector

Star: 1.2K

一個為.NET開發者設計的高效、靈活且使用者友好的依賴註入庫,它不僅簡化了復雜的API,提供了精選的功能集,還透過其獨特的裝飾器註冊和容器驗證功能,幫助開發者遵循最佳實踐,輕松構建可維護的應用程式,成為區分於其他DI容器的首選。

// 1. 建立容器var container = new Container();// 2. 配置容器(註冊服務)container.Register<IUserRepository, SqlUserRepository>(Life style.Transient);container.Register<ILogger, MailLogger>(Life style.Singleton); container.Register<UserController>();// 3. 驗證容器配置:container.Verify();// 4. 註冊容器為MVC的依賴解析器DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));

5、 Windsor

https://github.com/castleproject/Windsor

Star: 1.5K

一個功能豐富、成熟穩定的控制反轉(IoC)容器框架,專為 .NET 平台設計,旨在簡化依賴註入並支持高度可配置的元件管理。

// 建立容器var container = new WindsorContainer();// 添加和配置元件container.Install(FromAssembly.This());// 解析並配置根元件及其所有依賴項var king = container.Resolve<IKing>();king.RuleTheCastle();// 清理容器,應用程式結束container.Dispose();

覺得好看 點個在看👇