中山移动网站建设怎么做,成都广告设计公司有哪些,网站游戏网站开发,网站开发行业代码在前面的文章中#xff0c;我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL。那么#xff0c;能不能为.NET Interactive开发交互功能呢#xff1f;今天#xff0c;我们就来演示如何实现。创建项目新建类库项目Demo1Extension#xff0c;需要引用Nuget包Micro… 在前面的文章中我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL。那么能不能为.NET Interactive开发交互功能呢今天我们就来演示如何实现。创建项目新建类库项目Demo1Extension需要引用Nuget包Microsoft.DotNet.Interactive和Microsoft.DotNet.Interactive.CSharp。注意需要选择“包含预发新版”修改项目文件增加项目配置ItemGroupNone Include$(OutputPath)/Demo1Extension.dll Packtrue PackagePathinteractive-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.Registerstring((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 idxxxh1 stylecolor:#F00输入字符串/h1/div”。测试首先执行下面命令生成Nuget包:dotnet builddotnet pack /p:PackageVersion1.0.0
然后在VS Code中创建.NET Interactive notebook并引用上面生成的Nuget包:#i D:\codes\Demo1Extension\Demo1Extension\bin\Debug
#r nuget:Demo1Extension,1.0.0
由于我们刚才生成的Nuget包还在本地所以需要用#i命令设置加载位置。出现下面提示就表明扩展加载成功否则请检查上面说过的注意事项输入一个字符串执行返回正常自定义命令还可以实现自定义命令。这里我们增加了一个#!demo1命令它接受一个字符串参数并输出Htmlpublic Task OnLoadAsync(Microsoft.DotNet.Interactive.Kernel kernel)
{var command new Command(#!demo1, its 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“记住我