/// <summary> /// 每个被拦截的方法中执行 /// </summary> /// <param name="context"></param> /// <param name="next"></param> /// <returns></returns> public override async Task Invoke(AspectContext context, AspectDelegate next) { try { Console.WriteLine("AddAsync方法开始前"); await next(context); // 执行被拦截的方法 } catch (Exception) { Console.WriteLine("AddAsync方法出错"); //重复调用示例 ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { var baseClass = context.Proxy; foreach (var item in baseClass.GetType().GetMethods()) { if (item.Name.ToString() == _mess) { MethodInfo methodinfo = baseClass.GetType().GetMethod(_mess); methodinfo.Invoke(baseClass, null); } } } throw; } finally { Console.WriteLine("AddAsync方法结束"); } }
public DynamicProxyTestBase() { var builder = new ProxyGeneratorBuilder(); builder.Configure(Configure); ProxyGenerator = builder.Build(); }
/// <summary> /// Creates the rpc proxy. /// </summary> /// <param name="args">The args.</param> /// <returns>A T.</returns> public T CreateRpcProxy <T>(params object[] args) where T : class { var builder = new ProxyGeneratorBuilder(); builder.Configure(t => t.Interceptors.AddTyped <InnerAssemblyInterceptor>(new object[] { targetObj })); var proxyCreate = builder.Build(); return(proxyCreate.CreateClassProxy <T>(args)); }
/// <summary> /// Creates the rpc proxy. /// </summary> /// <param name="args">The args.</param> /// <returns>A T.</returns> public T CreateRpcProxy <T>(params object[] args) where T : class { //创建代理类 var builder = new ProxyGeneratorBuilder(); builder.Configure(t => t.Interceptors.AddTyped <PollyInterceptor>(new object[] { option })); var type = typeof(T); var proxyCreate = builder.Build(); return(proxyCreate.CreateClassProxy <T>(args)); }
public async Task <IEnumerable <string> > Get() { ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { Person p = proxyGenerator.CreateClassProxy <Person>(); Console.WriteLine(await p.HelloAsync("yzk")); //Console.WriteLine(p.Add(1, 2)); } return(new string[] { "value1", "value2" }); }
private static void Main(string[] args) { ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { Person p = proxyGenerator.CreateClassProxy <Person>(); //注入 p.Say("rupeng.com"); Console.WriteLine(p.GetType()); Console.WriteLine(p.GetType().BaseType); } Console.ReadKey(); }
/// <summary> /// 使用WebApi动态代理客户端 /// </summary> /// <param name="service"></param> /// <param name="optionAction"></param> public static IServiceCollection AddWebApiProxy(this IServiceCollection service, Action <WebApiProxyOptions> optionAction) { AppDomain.CurrentDomain.UpdateExcutingAssemblies(); var option = new WebApiProxyOptions(); optionAction(option); var proxyService = new List <Type>(); var proxyGeneratorBuilder = new ProxyGeneratorBuilder(); foreach (var o in option.WebApiProxies) { var types = o.GetType().Assembly.GetTypes().Where(x => x.IsInterface && x.GetMethods().SelectMany(m => m.GetCustomAttributes(typeof(ApiActionAttribute), true)).Any()); proxyGeneratorBuilder.Configure(config => { config.Interceptors.AddTyped(typeof(HttpApiClient), new object[] { o.BaseUrl ?? option.ProxyHost }); }); proxyService.AddRange(types); } foreach (var type in option.RegisteredServices) { if (type.Value.IsInterface && type.Value.GetMethods() .SelectMany(m => m.GetCustomAttributes(typeof(ApiActionAttribute), true)).Any()) { proxyGeneratorBuilder.Configure(config => { config.Interceptors.AddTyped(typeof(HttpApiClient), new object[] { type.Key ?? option.ProxyHost }); }); proxyService.Add(type.Value); } } var proxyGenerator = proxyGeneratorBuilder.Build(); foreach (var type in proxyService) { var proxy = proxyGenerator.CreateInterfaceProxy(type); service.AddSingleton(type, x => proxy); } return(service); }
static void Main(string[] args) { Console.WriteLine("开始程序"); //User user = new User(); //user.AddAsync(); ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { User p = proxyGenerator.CreateClassProxy <User>(); p.AddAsync(); //p.Error1(); } Console.ReadLine(); }
static void Main(string[] args) { //为了使用熔断降级 ,代码不至于与业务代码在一起 ,使用aop //国产Aop Install-Package AspectCore.Core -Version 0.5.0 //版本更新比较快,注意使用 //使用Aop封装降级 见项目 MyHystrix //方法调用 ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { Person p = proxyGenerator.CreateClassProxy <Person>(); p.Say("大海"); } Console.ReadKey(); }