您好,欢迎来到尔游网。
搜索
您的当前位置:首页DispatchProxy 代理 反射 私有方法

DispatchProxy 代理 反射 私有方法

来源:尔游网
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var internalType = Assembly.Load("ClassLibrary1").GetType("ClassLibrary1.Greeter"); // 加载目标程序集
            var internalMethod = internalType.GetMethod("Greet", BindingFlags.Public|BindingFlags.Static); //加载程序集中的方法
            var proxy = GreetingFactory.Create(); //创建代理
            var result = internalMethod.Invoke(null, new[] { proxy }); 
            Console.WriteLine(result);
            Console.Read();
        }
    }

   

    public class GreetingProxy : DispatchProxy
    {
        private GreetingImp _greetingImp;

        public GreetingProxy()
        {
            _greetingImp = new GreetingImp();
        }
        protected override object Invoke(MethodInfo targetMethod, object[] args)
        {
            var v = _greetingImp.GetType().GetMethod(targetMethod.Name);
            return v.Invoke(_greetingImp, args);

        }

        public class GreetingImp
        {
            public string Message => "Hello World";
        }
    }

    public class GreetingFactory
    {

        public static object Create()
        {
            var internalType = Assembly.Load("ClassLibrary1").GetType("ClassLibrary1.IGreeting");

            return typeof(DispatchProxy)
                .GetMethod(nameof(DispatchProxy.Create))
                .MakeGenericMethod(internalType, typeof(GreetingProxy))
                .Invoke(null, null);
        }
    }
}
using System;

namespace ClassLibrary1
{
    internal class Greeter
    {
        public static void Greet(IGreeting greeting)
        {
            Console.WriteLine(greeting.Message);
            Console.WriteLine(greeting.Test());
        }

    }

    internal interface IGreeting
    {
        string Message { get; set; }

        string Test();
    }
}

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务