国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.Net Core輕量級Aop解決方案:AspectCore

2024-07-10 12:49:08
字體:
來源:轉載
供稿:網友

什么是AspectCore Project ?

AspectCore Project 是適用于Asp.Net Core 平臺的輕量級 Aop(Aspect-oriented programming) 解決方案,它更好的遵循Asp.Net Core的模塊化開發理念,使用AspectCore可以更容易構建低耦合、易擴展的Web應用程序。AspectCore使用Emit實現高效的動態代理從而不依賴任何第三方Aop庫。

開使使用AspectCore

啟動 Visual Studio。從 File 菜單, 選擇 New > Project。選擇 ASP.NET Core Web Application 項目模版,創建新的 ASP.NET Core Web Application 項目。

從 Nuget 安裝 AspectCore.Extensions.DependencyInjection package: PM>   Install-Package AspectCore.Extensions.DependencyInjection 在一般情況下可以使用抽象的InterceptorAttribute自定義特性類,它實現IInterceptor接口。AspectCore默認實現了基于Attribute的攔截器配置。我們的自定義攔截器看起來像下面這樣:
public class CustomInterceptorAttribute : InterceptorAttribute{  public async override Task Invoke(IAspectContext context, AspectDelegate next)  {    try    {      Console.WriteLine("Before service call");      await next(context);    }    catch (Exception)    {      Console.WriteLine("Service threw an exception!");      throw;    }    finally    {      Console.WriteLine("After service call");    }   } }

定義ICustomService接口和它的實現類CustomService:

public interface ICustomService{  [CustomInterceptor]  void Call();}public class CustomService : ICustomService{  public void Call()  {    Console.WriteLine("service calling...");  }}

在HomeController中注入ICustomService:

public class HomeController : Controller{  private readonly ICustomService _service;  public HomeController(ICustomService service)  {    _service = service;  }  public IActionResult Index()  {    _service.Call();    return View();  }}

注冊ICustomService,接著,在ConfigureServices中配置創建代理類型的容器:

public IServiceProvider ConfigureServices(IServiceCollection services){  services.AddTransient<ICustomService, CustomService>();  services.AddMvc();  services.AddAspectCore();  return services.BuildAspectCoreServiceProvider();}

攔截器配置。首先安裝AspectCore.Extensions.Configuration package:

PM> Install-Package AspectCore.Extensions.Configuration

全局攔截器。使用AddAspectCore(Action<AspectCoreOptions>)的重載方法,其中AspectCoreOptions提供InterceptorFactories注冊全局攔截器:

 services.AddAspectCore(config => {   config.InterceptorFactories.AddTyped<CustomInterceptorAttribute>(); });

帶構造器參數的全局攔截器,在CustomInterceptorAttribute中添加帶參數的構造器:

public class CustomInterceptorAttribute : InterceptorAttribute{  private readonly string _name;  public CustomInterceptorAttribute(string name)  {    _name = name;  }  public async override Task Invoke(AspectContext context, AspectDelegate next)  {    try    {      Console.WriteLine("Before service call");      await next(context);    }    catch (Exception)    {      Console.WriteLine("Service threw an exception!");      throw;    }    finally    {      Console.WriteLine("After service call");    }  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄大仙区| 彭泽县| 巴林右旗| 英德市| 会理县| 太白县| 察雅县| 绥江县| 清苑县| 华池县| 大姚县| 安新县| 宣武区| 文登市| 阿拉善右旗| 昌邑市| 久治县| 阿合奇县| 大名县| 阜康市| 武定县| 牡丹江市| 寻甸| 库车县| 洪洞县| 浠水县| 同德县| 温宿县| 景谷| 彭阳县| 东乡族自治县| 共和县| 固原市| 蓝山县| 龙泉市| 闻喜县| 平和县| 息烽县| 边坝县| 永清县| 沁水县|