1. 程式人生 > >早安打工人! 來把你的.NET程式模組化吧

早安打工人! 來把你的.NET程式模組化吧

嗨朋友們,大家好! 還記得我是誰嗎? 對了! 我就是 .NET 打工人 **玩雙截棍的熊貓** ![](https://img2020.cnblogs.com/blog/1015637/202011/1015637-20201126092050352-2047986961.png) 今天吶,我特別要向 **寫框架** 的朋友們,**想要寫框架 ** 的朋友們,**已經有框架** 的朋友問聲好! 為什麼呢?因為我在 **二零二零年** 寫了一個小類庫。 眾所周知,在.NET方面的開發框架 [Abp](https://github.com/abpframework/abp) *(本文皆指 Abp VNEXT )* 有相當的知名度,下面我就跟大家講一講: 使用 [Abp](https://github.com/abpframework/abp) 框架的時候,我們都知道它有模組化系統,很好用啊,但是要依賴 `Volo.Abp`,裡面有很多多餘的依賴,我說朋友們有沒有更乾淨輕量的**模組化**實現啊? 只聽見下面有一個:我來! 這個時候,我一看,朋友們,人群當中,鑽出一個 [Riven.Modular](https://github.com/rivenfx/Modular) ! **哇!** 他整個看起來就像是 [Abp](https://github.com/abpframework/abp) 的模組化,特別顯眼,我一下就點了進去。 --- 我說你有什麼 **優點** 呢? 它說 * 依賴少,只依賴於 * Microsoft.Extensions.DependencyInjection 微軟官方依賴注入庫 * Microsoft.Extensions.Configuration 微軟官方配置庫 * JetBrains.Annotations JetBrains程式碼分析庫 * 相容性強,基於 `netstandard2.0` 開發,支援 * .net framework 4.6.1 或更高版本 * .net core 2.1 或更高版本 * 適用面廣 * asp.net core * winform * console --- 我說怎麼開始使用呢? 它說 ```csharp // dotnet cli dotnet add package Riven.Modular // nuget package manager Install-Package Riven.Modular ``` ```csharp // 引入名稱空間 using Riven; using Riven.Modular; ``` ```csharp // 新建一個模組 [DependsOn( typeof(依賴的其它模組)) )] public class MyAppModule : AppModule { public override void OnPreConfigureServices(ServiceConfigurationContext context) { // 註冊服務之前 } public override void OnConfigureServices(ServiceConfigurationContext context) { // 註冊服務 } public override void OnPostConfigureServices(ServiceConfigurationContext context) { // 註冊服務之後 } public override void OnPreApplicationInitialization(ApplicationInitializationContext context) { // 應用初始化之前 } public override void OnApplicationInitialization(ApplicationInitializationContext context) { // 應用初始化 } public override void OnPostApplicationInitialization(ApplicationInitializationContext context) { // 應用初始化之後 } public override void OnApplicationShutdown(ApplicationShutdownContext context) { // 應用停止 } } ``` ```csharp // 在 asp.net core中使用 using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Riven; namespace 你的名稱空間 { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { // 你的程式碼 services.AddRivenModule(Configuration); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.ApplicationServices.UseRivenModule(); // 你的程式碼 } } } ``` --- 我說在 **控制檯** 專案裡怎麼用啊? 它說 ```csharp // dotnet cli dotnet add package Riven.Modular // nuget package manager Install-Package Riven.Modular ``` ```csharp // dotnet cli dotnet add Microsoft.Extensions.Configuration dotnet add Microsoft.Extensions.Configuration.Json dotnet add Microsoft.Extensions.DependencyInjection // nuget package manager Install-Package Microsoft.Extensions.Configuration Install-Package Microsoft.Extensions.Configuration.Json Install-Package Microsoft.Extensions.DependencyInjection ``` ```csharp using System; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Riven; namespace 你的名稱空間 { class Program { static void Main(string[] args) { // 你應用的配置 var Configuration = GetAppConfiguration(); // IServiceCollection services = new ServiceCollection(); services.AddSingleton(Configuration); services.AddRivenModule(Configuration); // IServiceProvider serviceProvider = services.BuildServiceProvider(); serviceProvider.UseRivenModule(); } static IConfiguration GetAppConfiguration() { var configurationBuilder = new ConfigurationBuilder(); return configurationBuilder .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .Build(); } } } ``` --- 我當時說了一句,你這不就是 Abp 的模組化嗎! 它也說了一句,這就是Abp 的模組化的精簡版,幾乎一個摸樣! 點進 [原始碼](https://github.com/rivenfx/Modular) 之後,馬上就看到了一個 ![image-20201126090843253](https://img2020.cnblogs.com/blog/1015637/202011/1015637-20201126091001588-1857175349.png) ![image-20201126084249065](https://img2020.cnblogs.com/blog/1015637/202011/1015637-20201126091000941-871937493.png) 它還說 [Abp](https://github.com/abpframework/abp) 為全國 .NET 打工人做了一件大好事。 因為在這個 [Abp](https://github.com/abpframework/abp) 當中,不僅可以快速開發做業務,同時也能看原始碼學習知識。 可以說從 [Riven.Modular](https://github.com/rivenfx/Modular) 身上,我們可以看到全國的.NET打工人都在進步的。 這就叫: **看原始碼學程式碼,我有知識我自豪!** --- 好了親愛的朋友們,歡樂的時光總是短暫的,又到時候講拜拜了 如果覺得好用的話請 收藏 轉發 star fork 一把梭 [原始碼倉庫](https://github.com/rivenfx/Modular)