Skip to content

轻代理AOP,实现方法拦截以及入参返回值修改。

License

Notifications You must be signed in to change notification settings

LI-XIAOYAO/PureProxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PureProxy

轻代理AOP,实现方法拦截以及入参返回值修改。


安装

Install-Package PureProxy

注意项

  • 忽略代理添加 IgnoreProxyAttribute 特性
  • 局部拦截实现 InterceptorAttribute 特性,优先级:忽略 > 方法 > 类型 > 全局
  • 类代理时需要定义为 virtual

示例

// 添加全局拦截器
public class TestInterceptor : IInterceptor
{
    public void Invoke(IArguments args)
    {
        // TODO...
        // 修改入参
        // args.Arguments[0] = "Test";

        // 调用方法
        var result = args.Invoke();

        // TODO...
        // 修改返回值
        // args.Result = "Test";
    }
}

// 局部拦截
public class ExceptionAttribute : InterceptorAttribute
{
    public override void Invoke(IArguments arguments)
    {
        try
        {
            // TODO...
            // 修改入参
            // args.Arguments[0] = "Test";

            // 调用方法
            var result = args.Invoke();

            // TODO...
            // 修改返回值
            // args.Result = "Test";
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

public class TestService : ITestService
{
    [Exception]
    public string Test()
    {
        throw new NotImplementedException();
    }
}

// 添加注入
services.AddPureProxy<TestInterceptor>(options =>
{
    options.AddScoped<Test1Service>();
    options.AddScoped<ITestService, TestService>();
});

// 生成代理类型
var test3ServiceProxyType = ProxyFactory.ProxyGenerator<Test3Service>();

About

轻代理AOP,实现方法拦截以及入参返回值修改。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages