博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数
阅读量:5158 次
发布时间:2019-06-13

本文共 2362 字,大约阅读时间需要 7 分钟。

LinqPad有个非常强大的Dump函数。这篇讲解一下如何将Dump函数应用在.Net MVC Web开发中。

先看效果:

  

 一、用.Net Reflector反编译LinqPad.exe,找出Dump函数的定义:

  经过反编译发现,Dump函数调用了LINQPad.ObjectGraph.Formatters.XhtmlWriter类中FormatObject函数,把对象转成了Html。

 

 二、反射调用FormatObject函数:

  由于FormatObject函数是protect类型,不能直接调用,只能反射了。

  

 三、在.Net MVC中使用Dump:

 BigDump.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web.Mvc;using System.Reflection;using System.IO;using System.Text;namespace System.Web{    public static class BigDump    {        private static MethodInfo dumpMethodInfo = null;        private static object xhtmlWriterInstance = null;        private static void Init()        {            if (dumpMethodInfo == null || xhtmlWriterInstance == null)            {                var asm = Assembly.LoadFile(HttpContext.Current.Server.MapPath("~/Lib/LINQPad.exe"));                Type t1 = asm.GetType("LINQPad.ObjectGraph.Formatters.XhtmlWriter");                ConstructorInfo t1Constructor = t1.GetConstructor(new Type[] { typeof(TextWriter), typeof(bool) });                xhtmlWriterInstance = t1Constructor.Invoke(new Object[] { new StringWriter(new StringBuilder()), false });                dumpMethodInfo = t1.GetMethod("FormatObject", BindingFlags.Instance | BindingFlags.NonPublic);            }        }        public static MvcHtmlString Render
(this T o, string description = "", int? depth = 3) { Init(); var result = dumpMethodInfo.Invoke(xhtmlWriterInstance, new Object[] { o, description, depth, new TimeSpan() }); return new MvcHtmlString(result as string); } public static List
Stack { get; set; } static BigDump() { Stack = new List
(); } public static T Dump
(this T o, string description = "", int? depth = 3) { Stack.Add(o.Render(description, depth)); return o; } public static void Clear() { Stack = new List
(); } public static MvcHtmlString Flush() { var html = new MvcHtmlString(string.Join("\r\n", Stack.Select(r => r.ToHtmlString()).ToArray())); Clear(); return html; } }}

转载于:https://www.cnblogs.com/linqpad/p/4143824.html

你可能感兴趣的文章
Java基础知识强化48:Java中哈希码
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
bool
查看>>
C#笔记一 .Net Framwork
查看>>
第六次实训
查看>>
Wireshark 读书笔记
查看>>
张季跃201771010139《面向对象程序设计(java)》第一周学习总结
查看>>
设计模式 创建型 单例模式
查看>>
HTML_03_基础表单属性 ...
查看>>
虚拟机上安装vmware tool
查看>>
Oracle Profile
查看>>
excel导出工具
查看>>
预处理语句
查看>>
MySql语句分类
查看>>
MySql 存储过程 光标只循环一次
查看>>
CSS文本框边框发光效果
查看>>
演进式数据库建模
查看>>
FEniCS 1.1.0 发布,计算算术模型
查看>>
Entity Framework知识小总结
查看>>
打印蛇形矩阵
查看>>