public async Task MemberMapPropertyCodeBuilderTest()
        {
            var         source      = @"
    public interface IA
    {
        Regulus.Remote.Property<int> Property1{get;}
    }
    namespace NS1
    {
        
        
        public class C1
        {
        }
        
        public interface IB
        {
            Regulus.Remote.Property<C1> Property1{get;}
        }
    }

";
            var         tree        = CSharpSyntaxTree.ParseText(source);
            Compilation compilation = tree.Compilation();

            var builder = new MemberMapCodeBuilder(compilation);

            NUnit.Framework.Assert.AreEqual(@"typeof(global::IA).GetProperty(""Property1""),typeof(global::NS1.IB).GetProperty(""Property1"")", builder.PropertyInfosCode);
        }
        public async Task MemberMapMethodCodeBuilderTest()
        {
            var         source      = @"
public interface IA
    {
        Regulus.Remote.Value<int> Method1(int a1,int a2);
    }
namespace NS1
{
    
    
public interface IB
    {
        Regulus.Remote.Value<int> Method1(int a1,int a2);
        Regulus.Remote.Value<int> Method2();
    }
}

";
            var         tree        = CSharpSyntaxTree.ParseText(source);
            Compilation compilation = tree.Compilation();
            //new Regulus.Utility.Reflection.TypeMethodCatcher((System.Linq.Expressions.Expression<System.Action<global::IA,int,int>>)((ins,_1,_2) => ins.Method(_1,_2))).Method,new Regulus.Utility.Reflection.TypeMethodCatcher((System.Linq.Expressions.Expression<System.Action<global::NS1.IB,int,int>>)((ins,_1,_2) => ins.Method(_1,_2))).Method
            var builder = new MemberMapCodeBuilder(compilation);

            NUnit.Framework.Assert.AreEqual("new Regulus.Utility.Reflection.TypeMethodCatcher((System.Linq.Expressions.Expression<System.Action<global::IA,int,int>>)((ins,_1,_2) => ins.Method1(_1,_2))).Method,new Regulus.Utility.Reflection.TypeMethodCatcher((System.Linq.Expressions.Expression<System.Action<global::NS1.IB,int,int>>)((ins,_1,_2) => ins.Method1(_1,_2))).Method,new Regulus.Utility.Reflection.TypeMethodCatcher((System.Linq.Expressions.Expression<System.Action<global::NS1.IB>>)((ins) => ins.Method2())).Method", builder.MethodInfosCode);
        }
        public async Task MemberMapInterfaceCodeBuilderTest()
        {
            var         source      = @"
public interface IA
    {
        
    }
namespace NS1
{
    
    public class C1{}
public interface IB
    {
       
    }
}

";
            var         tree        = CSharpSyntaxTree.ParseText(source);
            Compilation compilation = tree.Compilation();

            var builder = new MemberMapCodeBuilder(compilation);

            NUnit.Framework.Assert.AreEqual(@"new System.Tuple<System.Type, System.Func<Regulus.Remote.IProvider>>(typeof(global::IA),()=>new Regulus.Remote.TProvider<global::IA>()),new System.Tuple<System.Type, System.Func<Regulus.Remote.IProvider>>(typeof(global::NS1.IB),()=>new Regulus.Remote.TProvider<global::NS1.IB>())", builder.InterfacesCode);
        }
        public async Task MemberMapEventCodeBuilderTest()
        {
            var         source      = @"
public interface IA
    {
        event System.Action Event1;
    }
namespace NS1
{
    
    public class C1{}
public interface IB
    {
        event System.Action<C1,string> Event1;
    }
}

";
            var         tree        = CSharpSyntaxTree.ParseText(source);
            Compilation compilation = tree.Compilation();

            var builder = new MemberMapCodeBuilder(compilation);

            NUnit.Framework.Assert.AreEqual(@"typeof(global::IA).GetEvent(""Event1""),typeof(global::NS1.IB).GetEvent(""Event1"")", builder.EventInfosCode);
        }