早安打工人! 來把你的.NET程式模組化吧
阿新 • • 發佈:2020-11-26
嗨朋友們,大家好!
還記得我是誰嗎?
對了!
我就是 .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)