国产探花免费观看_亚洲丰满少妇自慰呻吟_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");    }  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵石县| 新安县| 华蓥市| 绥江县| 沁源县| 铁岭市| 英德市| 泰和县| 广汉市| 阳泉市| 灵石县| 南部县| 长春市| 含山县| 克拉玛依市| 锦州市| 镇沅| 嘉定区| 钦州市| 长葛市| 福安市| 合肥市| 靖安县| 运城市| 江北区| 嘉祥县| 平陆县| 名山县| 正定县| 陆河县| 南安市| 紫金县| 长武县| 龙海市| 龙泉市| 界首市| 宜黄县| 罗城| 峨眉山市| 佛冈县| 永安市|