使用C#为.NET Interactive开发自定义扩展

在前面的文章中,我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL。

那么,能不能为.NET Interactive开发交互功能呢?

今天,我们就来演示如何实现。

创建项目

新建类库项目Demo1Extension,需要引用Nuget包Microsoft.DotNet.InteractiveMicrosoft.DotNet.Interactive.CSharp注意:需要选择“包含预发新版”

修改项目文件,增加项目配置:

<ItemGroup><None Include="$(OutputPath)/Demo1Extension.dll" Pack="true" PackagePath="interactive-extensions/dotnet" />
</ItemGroup>

指定PackagePath不能改,否则无法加载扩展

新增自定义扩展类

创建Demo1KernelExtension类,实现IKernelExtension

这里有个坑: 类名必须以KernelExtension结尾,否则无法加载扩展。这个默认规则太隐晦了,害我试了半天。

自定义格式化

可以为指定Type实现自定义格式化输出。

这里我们以string为例:

public class Demo1KernelExtension : IKernelExtension
{public Task OnLoadAsync(Microsoft.DotNet.Interactive.Kernel kernel){//指定输出格式Formatter.SetPreferredMimeTypeFor(typeof(string), HtmlFormatter.MimeType);Formatter.Register<string>((str, writer) =>{writer.Write(DrawHtml(str));}, HtmlFormatter.MimeType);return Task.CompletedTask;}public static IHtmlContent DrawHtml(string str){var id = "div" + Guid.NewGuid().ToString("N");var div = PocketViewTags.div[id: id](PocketViewTags.h1[style: "color:#F00"](str.ToString()));return div;}
}

我们将输入的字符串格式化成了Html输出,格式为“<div id='xxx'><h1 style='color:#F00'>输入字符串</h1></div>”。

测试

首先,执行下面命令,生成Nuget包:

dotnet builddotnet pack /p:PackageVersion=1.0.0

然后,在VS Code中创建.NET Interactive notebook,并引用上面生成的Nuget包:

#i D:\codes\Demo1Extension\Demo1Extension\bin\Debug
#r "nuget:Demo1Extension,1.0.0"

由于我们刚才生成的Nuget包还在本地,所以需要用#i命令设置加载位置。

出现下面提示,就表明扩展加载成功,否则请检查上面说过的注意事项:

输入一个字符串,执行,返回正常:

自定义命令

还可以实现自定义命令。

这里,我们增加了一个#!demo1命令,它接受一个字符串参数,并输出Html:

public Task OnLoadAsync(Microsoft.DotNet.Interactive.Kernel kernel)
{var command = new Command("#!demo1", "it's a demo extension");command.AddArgument(new Argument());command.Handler = CommandHandler.Create((string str, KernelInvocationContext invocationContext) =>{invocationContext.Display(DrawHtml("demo1: "+str));});kernel.AddDirective(command);return Task.CompletedTask;
}

再次生成Nuget包并引用,记得修改一下版本号。

执行命令,返回正常:

结论

在本文中,我们演示了如何创建.NET Interactive notebook自定义扩展。

关于自定义扩展的详细API,可以参看官方文档:https://github.com/dotnet/interactive/blob/main/docs/extending-dotnet-interactive.md。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix snmp自定义OID nginx监控实例(55)

为什么80%的码农都做不了架构师&#xff1f;>>> 为什么要自定义OID&#xff1f; 前面的文章我们已经讲过zabbix如何使用snmp监控服务器&#xff0c;但是他有一个很明显的局限性&#xff1a;只能监控定义好的OID项目&#xff0c;假如我们想知道nginx进程是否在运行…

(转帖)对抽象编程:接口和抽象类

[你必须知道的.NET] 第二回&#xff1a;对抽象编程&#xff1a;接口和抽象类-王涛 [你必须知道的.NET] 第二回&#xff1a;对抽象编程&#xff1a;接口和抽象类 Author&#xff1a;王涛 Date&#xff1a;2007-4-12 ©2007 Anytao.com 转贴请注明出处&#xff0c;留此信息。…

mysql从节点参数配置

官网地址&#xff1a;MySQL :: MySQL Replication :: 2.6.3 Replica Server Options and Variables 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 复制 / ... / 副本服务器选项和变量 2.6.3 副本服务器…

Windows 7各版本比较

http://windows.microsoft.com/zh-cn/windows7/products/compare家庭普通版 家庭高级版专业版 旗舰版 桌面体验全新的 Windows 任务栏∨∨∨∨实时任务栏缩略图预览∨∨∨∨快速显示桌面∨∨∨∨自定义通知区域图标∨∨∨∨桌面小工具∨∨∨∨半透明玻璃窗口∨∨∨Aero 桌…

实验四 图的遍历算法设计与实现

一、实验名称&#xff1a;图的遍历算法设计与实现 二、实验目的&#xff1a; 1.掌握图的深度优先遍历的算法。 2.掌握图的广度优先遍历的算法。 3.实验章节&#xff1a;算法设计与分析 第四章 三、实验内容。实验问题和程序运行结果 第一部分 广度优先遍历算法 完善下列程序&am…

jpa 定义中间表实体_Spring Data JPA实体详解

1. Spring Data JPA实体概述JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系数据库的映射&#xff0c;此类Java对象称为JPA实体或简称实体。实体通常与底层数据库中的单个关系表相关联&#xff0c;每个实体的实例表示数据库表格中的某一行。2. Spring Data JPA实体管理…

为什么魂斗罗只有128KB却可以实现那么长的剧情?

全世界只有3.14 % 的人关注了爆炸吧知识现代程序员A和1980年代游戏程序员B的对话&#xff1a;A&#xff1a;为什么你用128KB能实现这么多画面、音乐、动画&#xff1f;B&#xff1a;128KB还不够么&#xff1f;其实为了表现力已经相当奢侈了&#xff0c;加了很多不重要的细节。A…

asp.net core 6 新特性,支持HTTP/3 端点发布

???? 序言Http3 协议构建在UDP的基础上&#xff0c;是的&#xff0c;就这么神奇&#xff0c;以前被誉为不稳定大神的UDP&#xff0c;现在承担起可靠通讯协议的底层协议。为了消除UDP的不确定性&#xff0c;在UDP协议之上&#xff0c;新增了QUIC协议。使用QUIC协议代替TCP协…

imac android studio,Mac安装Android Studio的时候忘记安装Avd Manager怎么办?

工作最近得闲&#xff0c;准备学下React-Native。MAC下安装Android Studio的时候&#xff0c;忘记安装Avd Manager。无奈之下删除Android Studio准备重装&#xff0c;却发现有很多配置文件残留在系统上&#xff0c;导致再次重装的时候完全跳过了Avd Manager的配置。在网上找了一…

浮点数赋值给整数_初学者专题:变量和赋值

作者&#xff1a;老齐对于初学Python者&#xff0c;除了看书(《跟老齐学Python&#xff1a;轻松入门》或者《Python大学实用教程》&#xff0c;均为电子工业出版社出版)、或者看视频(网易云课堂、CSDN上均有老齐的视频课程)&#xff0c;还要进行专题性总结。比如本文&#xff0…

分析android动画模块[转]

2019独角兽企业重金招聘Python工程师标准>>> 作者: 刘鹏 日期: 2009-03-07 Android 平台提供了两类动画&#xff0c;一类是 Tween 动画&#xff0c;即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果&#xff1b;第二类是 Frame 动画&#xff0c;即…

[转载]锦上添花Sybase数据库题目大网罗-4

Q.如何点窜IP地点窜改后的interfaces文件&#xff1f; A.布置SYBASE Adapive Server的呆滞IP地点窜改后, 应点窜 interfaces 文件及有关的设置。   假设 interfaces 文件中哄骗的是呆滞名而不是 IP 地点, 则不需求变化。 但假设客户端连合效力器使   用的是效力器的 转载于…

Nginx+Tomcat动静态资源分离

1 创建用户、用户组 useradd -g users www passwd www //设置密码&#xff0c;否则该用户不可用 groupadd -g 888 www //创建用户组 gpasswd -a www www //将用户www加入用户组www 2 下载nginx、pcre(正则使用) wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.…

当你的手被502粘住了要怎么做?

1 看清楚&#xff0c;这是大裤衩子▼这才是 jk 裙▼2 天天看你们骂海王男友其实我有一个河神男友▼3 当你的手被502粘住了怎么办&#xff1f;▼4 不能指望食堂阿姨了自己动手丰衣足食▼5 当你被别人夸奖时▼6 宅在家里也能拍大片▼7 是我本人没错了▼你点的每个赞&#…

excel 如何替换带上标的文字_如何在Excel中批量提取中文汉字和英文字母

1. 在数据源的右边分别命名新的两列为“中文名”和“英文名”&#xff0c;然后将数据源复制到“中文名”这一列。2. 为了确保英文名字可以连在一起&#xff0c;这里我们在有空格的英文名字中间添加一个“-”。选择“中文名”下所有数据源&#xff0c;按CtrlF&#xff0c;点击“…

国内最大.NET平台重金招募中 你竟然还不知道?

各位路过的捎带眼瞅见的不小心翻到的英雄好汉请留步~让小编来带你康康这个胆敢号称国内最大的.NET的平台到底有何惊人之处一难道是因为它有--“最敢”的生态开放平台技术驱动商业创新&#xff0c;数字引领企业的未来&#xff0c;明源云通过多年专业积累&#xff0c;融合多种创新…

GChemPaint-绘制化学分子布局

Toy Posted in AppsRSSTrackbackGChemPaint 是专门用来绘制 2D 的化学分子布局软件&#xff0c;它合用于 GNOME 桌面。经由历程它所绘制的化学分子布局可以被嵌入到其他的应用程序中。Download GChemPaint 0.7.91版权声明&#xff1a; 原创作品&#xff0c;允许转载&#xff0c…

JAVA编程经验汇总 (载)

1&#xff0e; 关于动态加载机制?? 学习Java比C更容易理解OOP的思想&#xff0c;毕竟C还混合了不少面向过程的成分。很多人都能背出来Java语言的特点&#xff0c;所谓的动态加载机制等等。当然概念往往是先记住而后消化的&#xff0c;可有多少人真正去体会过动态加载的机制&a…

软件开发有哪些规范和标准_深圳APP软件开发的流程是什么?

深圳APP软件开发的流程是什么&#xff1f;APP软件开发是根据用户需求构建软件系统或设备的软件部分的过程&#xff0c;是一项系统工程&#xff0c;包括需求捕获&#xff0c;需求分析&#xff0c;系统设计&#xff0c;系统实现和系统测试。APP软件通常以某种编程语言实现&#x…

第十六周项目3-有相同数字?

输入两个数组中要存放的元素个数及元素值&#xff08;不超过50个&#xff09;&#xff0c;判断这两个数组中是否有相同的数字。 当两组数中有相同数字时&#xff0c;输出YES&#xff0c;否则&#xff0c;输出NO /* * Copyright (c) 2014,烟台大学计算机学院 * All right reserv…