dynamic与匿名对象

用dynamic接收匿名对象很方便,因为不需要去定义model了,但是也有一个弊端,就是匿名对象的作用范围是internal的,也就是只能存在于当前程序域,所以用dynimic跨程序域去接收一个匿名对象,显而易见是接收不到的

那么有什么好的解决办法么

第一种

[assembly: InternalsVisibleTo("A.B.BLL")]

这种做法破坏了所有internal修饰类的访问限制

第二种

将dynamic封装在一个通用的对象中

 public class DynamicModel 
    {
        /// <summary>
        ///  key
        /// </summary>
        public string DynamicKey { get; set; }

        /// <summary>
        ///  object
        /// </summary>
        public dynamic DynamicObj { get; set; }
    }

这种做法就可以跨程序域传递参数了

第三种

使用委托

    biz.TestDynamic(()=>new {name=1 });
  public void TestDynamic(Func<dynamic> pre)
        {
            var a= pre();

        }

所以纵观这些方法,感觉委托对跨程序域传递匿名对象还是很方便的,另外linq、EF中很多匿名对象的跨程序域传递也是采用的委托的实现方式

原文地址:https://www.cnblogs.com/njcxwz/p/5943033.html