咪免直播高品质美女在线视频互动社区_咪免直播官方版_咪免直播直播视频在线观看免费版下载

您的位置:首頁 > 軟件教程 > 教程 > 肉夾饃(Rougamo)編譯時AOP組件介紹及IoC/DI擴展

肉夾饃(Rougamo)編譯時AOP組件介紹及IoC/DI擴展

來源:好特整理 | 時間:2024-09-03 09:54:33 | 閱讀:66 |  標簽: a IOC C 修復 ug   | 分享到:

肉夾饃(https://github.com/inversionhourglass/Rougamo),一款編譯時AOP組件,無需在應用啟動時進行初始化,也無需繁瑣的配置;支持所有種類方法(同步和異步、靜態(tài)和實例、構造方法/屬性/普通方法);提供了簡單易上手的Attribute應用方式,同時還提供了類

肉夾饃(Rougamo)是一款編譯時AOP組件,無需在應用啟動時進行初始化,也無需繁瑣的配置。它支持所有種類方法(同步和異步、靜態(tài)和實例、構造方法/屬性/普通方法),提供了簡單易上手的Attribute應用方式,同時還提供了類AspectJ表達式的批量應用規(guī)則。

4.0.1 更新內容

在4.0版本發(fā)布的文章評論中,有朋友反饋了一個調試時無法查看方法內部變量值的問題。本次更新就是修復這個問題的,4.0.1不包含其他修改,對調試時禁用肉夾饃的朋友沒有任何影響,可以酌情升級。

肉夾饃(Rougamo)編譯時AOP組件介紹及IoC/DI擴展

肉夾饃IoC/DI擴展

4.0.1本來是不準備發(fā)博客的,內容一句話就結束了,不過又想到前段時間還發(fā)布了IoC擴展,索性就合在一起寫一篇博客吧。

各位在使用肉夾饃時,最常遇到的問題可能就是如何與IoC交互了,F在主流的動態(tài)代理本身就需要IoC才能完成,所以動態(tài)代理在IoC交互方面具有天然的優(yōu)勢,而肉夾饃編譯時完成不依賴IoC,所以與IoC的交互也不是很方便。但不方便并不是不能。此前已經有朋友在自己的項目中實現了IoC的訪問,比如Rougamo.OpenTelemetry, FreeSql。考慮到IoC的使用在現在已經非常普遍,所以新增了幾個常用IoC的擴展包。

目前只對最常用的兩個IoC組件提供了支持,一個是微軟官方的 Microsoft.Extensions.DependencyInjection ,另一個是 Autofac ,主要包含四個NuGet:

  • Rougamo.Extensions.DependencyInjection.AspNetCore
  • Rougamo.Extensions.DependencyInjection.GenericHost
  • Rougamo.Extensions.DependencyInjection.Autofac.AspNetCore
  • Rougamo.Extensions.DependencyInjection.Autofac

其中 AspNetCore 結尾的兩個NuGet專用于AspNetCore(廢話了哦),另外兩個NuGet用于通用主機(Generic Host)和Framework等場景。

版本號說明

在引用這些NuGet包時,你會發(fā)現他們都包含很多個版本,這并不是版本迭代更新快或者版本號設置錯了導致的,版本號有相應的規(guī)則,它們的主版本號跟隨對應IoC組件的NuGet主版本號。微軟官方的兩個擴展包的主版本號跟隨 Microsoft.Extensions.* 的主版本號(也是.NET SDK的版本), Autofac 的兩個擴展包的主版本號跟隨 Autofac 的主版本號。

快速開始

下面直接用代碼快速展示如何使用對應的擴展包。

Rougamo.Extensions.DependencyInjection.AspNetCore

// 注冊Rougamo(注:如果你不使用IoC/DI功能,Rougamo默認是不需要注冊操作的)
public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);
    // ...省略其他步驟
    builder.Services.AddRougamoAspNetCore();
    // ...省略其他步驟
}

// 在切面類型中獲取IServiceProvider實例并使用
public class TestAttribute : MoAttribute
{
    public override void OnEntry(MethodContext context)
    {
        // 使用擴展方法GetServiceProvider獲取IServiceProvider實例
        var services = context.GetServiceProvider();

        // 使用IServiceProvider
        var xxx = services.GetService();
    }
}

Rougamo.Extensions.DependencyInjection.GenericHost

// 注冊Rougamo(注:如果你不使用IoC/DI功能,Rougamo默認是不需要注冊操作的)
public static void Main(string[] args)
{
    var builder = Host.CreateDefaultBuilder();
    // ...省略其他步驟
    builder.ConfigureServices(services => services.AddRougamoGenericHost());
    // ...省略其他步驟
}

// 在切面類型中獲取IServiceProvider實例并使用
public class TestAttribute : MoAttribute
{
    public override void OnEntry(MethodContext context)
    {
        // 使用擴展方法GetServiceProvider獲取IServiceProvider實例
        var services = context.GetServiceProvider();

        // 使用IServiceProvider
        var xxx = services.GetService();
    }
}

Rougamo.Extensions.DependencyInjection.Autofac.AspNetCore

// 注冊Rougamo(注:如果你不使用IoC/DI功能,Rougamo默認是不需要注冊操作的)
public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);
    builder.Host
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureContainer(builder =>
            {
                builder.RegisterRougamoAspNetCore();
            });
    
    // 注冊IHttpContextAccessor也是必須的
    builder.Services.AddHttpContextAccessor();
}

// 在切面類型中獲取ILifetimeScope實例并使用
public class TestAttribute : MoAttribute
{
    public override void OnEntry(MethodContext context)
    {
        // 使用擴展方法GetAutofacCurrentScope獲取ILifetimeScope實例
        var scope = context.GetAutofacCurrentScope();

        // 使用ILifetimeScope
        var xxx = scope.Resolve();
    }
}

Rougamo.Extensions.DependencyInjection.Autofac

// 注冊Rougamo(注:如果你不使用IoC/DI功能,Rougamo默認是不需要注冊操作的)
public static void Main(string[] args)
{
    var builder = Host.CreateDefaultBuilder();
    
    builder
        .UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .ConfigureContainer(builder =>
        {
            builder.RegisterRougamo();
        });
}

// 在切面類型中獲取IServiceProvider實例并使用
public class TestAttribute : MoAttribute
{
    public override void OnEntry(MethodContext context)
    {
        // 使用擴展方法GetAutofacCurrentScope獲取ILifetimeScope實例
        var scope = context.GetAutofacCurrentScope();

        // 使用ILifetimeScope
        var xxx = scope.Resolve();
    }
}

比較早的Framework項目以及WinForm、WPF等項目可能并沒有使用通用主機(Generic Host),此時使用 Rougamo.Extensions.DependencyInjection.Autofac 將更加直接,初始化時創(chuàng)建 ContainerBuilder 后直接調用 RegisterRougamo 擴展方法即可。

var builder = new ContainerBuilder();
builder.RegisterRougamo();

更多

肉夾饃IoC/DI擴展更多的信息請訪問 Rougamo.DI (https://github.com/inversionhourglass/Rougamo.DI),歡迎反饋建議和提交PR.

小編推薦閱讀

好特網發(fā)布此文僅為傳遞信息,不代表好特網認同期限觀點或證實其描述。

a 1.0
a 1.0
類型:休閑益智  運營狀態(tài):正式運營  語言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動

《alittletotheleft》官網正版是一款備受歡迎的休閑益智整理游戲。玩家的任務是對日常生活中的各種雜亂物

相關視頻攻略

更多

掃二維碼進入好特網手機版本!

掃二維碼進入好特網微信公眾號!

本站所有軟件,都由網友上傳,如有侵犯你的版權,請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網安備:43070202000427號© 2013~2025 haote.com 好特網