.NET开发

简介

在上一篇中,我为大家讲解了如何实现插件的安装,在文章的最后,留下了两个待解决的问题。

  • .NET Core 2.2中不能实现运行时删除插件
  • .NET Core 2.2中不能实现运行时升级插件

其实这2个问题归根结底其实都是一个问题,就是插件程序集被占用,不能在运行时更换程序集。在本篇中,我将分享一下我是如何一步一步解决这个问题的,其中也绕了不少弯路,查阅过资料,在.NET Core官方提过Bug,几次差点想放弃了,不过最终是找到一个可行的方案。

阅读更多

上一篇中,我们针对运行时启用/禁用组件做了一些尝试,最终我们发现借助IActionDescriptorChangeProvider可以帮助我们实现所需的功能。本篇呢,我们就来继续研究如何完成插件的安装,毕竟之前的组件都是我们预先放到主程序中的,这样并不是一种很好的安装插件方式。

阅读更多

在上一篇写完之后,我突然想到了一个问题,如果像前两篇所设计那个来构建一个插件式系统,会有一个很严重的问题,即

当你添加一个插件之后,整个程序不能立刻启用该插件,只有当重启整个ASP.NET Core应用之后,才能正确的加载插件。因为所有插件的加载都是在程序启动时ConfigureService方法中配置的。

这种方式的插件系统会很难用,我们期望的效果是在运行时动态启用和禁用插件,那么有没有什么解决方案呢?答案是肯定的。下面呢,我将一步一步说明一下自己的思路、编码中遇到的问题,以及这些问题的解决方案。

为了完成这个功能,我走了许多弯路,当前这个方案可能不是最好的,但是确实是一个可行的方案,如果大家有更好的方案,我们可以一起讨论一下。

阅读更多

在上一篇中,我们介绍了通过一个最简单了例子,给大家演示了一下,如何在ASP.NET Core Mvc中借助ApplicationPart来开发一个插件。在文章的最后,我们也提出了一些待解决的问题。

首先呢,第一个要解决问题是,每次我们创建一个新的插件,每次都要重新创建项目,添加类库引用,以及手动修改 csproj 文件,非常的繁琐。那么有没有一种方式可以减少这部分操作的?

回想一下,当我们每次使用 Visual Studio创建项目的时候,我们都可以选择一个项目模板,Visual Studio不仅可以根据我们选择的模板创建出项目,而且我们所需的程序集引用都会预先配置好,不需要我们重复配置了。那么我们是否可以自己创建一些模板呢?答案是肯定的。

本文中,我就来给大家演示一下,在如何为.NET Core项目创建项目模板,简化操作流程。

阅读更多

前言

如果你使用过CMS的话,肯定会用过一些CMS的插件化功能,用户可以通过上传插件包的方式动态启用一些功能,那么在ASP.NET Core MVC中如何实现插件化开发呢,下面我们来探究一下。

本系列只是笔者的一些尝试,并不表示一定正确,只是为了分享一些思路,大家可以一起讨论一下,后续会不断更新。

什么是ApplicationPart?

在ASP.NET Core中进行插件话开发,就不得不说ApplicationPartApplicationPart是ASP.NET Core一个重要组件,它是应用程序资源的一种抽象,通过它可以发现程序集中包含的控制器、视图组件、TagHelper和预编译Razor视图等MVC功能。

阅读更多

原文:How to Debug LINQ queries in C#
作者:Michael Shpilt
译文:如何在C#中调试LINQ查询
译者:Lamond Lu

在C#中我最喜欢的特性就是LINQ。使用LINQ, 我们可以获得一种易于编写和理解的简洁语法,而不是单调的foreach循环,它可以让你的代码更加美观。

但是LINQ也有不好的地方,就是调试起来非常难。我们无法知道查询中到底发生了什么。我们可以看到输入值和输出值,但是仅此而已。当代码出现问题的时候,我们只能盯着代码看吗?答案是否定的,这里有几种可以使用的LINQ的调试方法。

阅读更多

背景

最近在徒手造轮子,编写一个ASP.NET Core的日志监控器,其中用到了自定义中间件读取Request.Body和Response.Body的内容,但是编写过程,并不想想象中的一帆风顺,ASP.NET Core针对Request.Body和Response.Body的几个特殊设计,导致了完成以上功能需要绕一些弯路。

原始代码

为了读取Request.Body和Response.Body的内容,我的实现思路如下:

  • 创建一个LoggerMiddleware的中间件,将它放置在项目中间件管道的头部。因为根据ASP.NET Core的中间件管道设计,只有第一个中间件才能获取到原始的请求信息和最终的响应信息。
  • Request.Body和Response.Body属性都是Steram类型, 在LoggerMiddleware中间件的InvokeAsync方法中,我们可以分别使用StreamReader读取Request.Body和Response.Body的内容。

阅读更多

原文地址:Create Interactive .NET Documentation with Try .NET
原文作者:Maria
译文地址:https://www.cnblogs.com/lwqlun/p/10894497.html
译者:Lamond Lu

背景

当我们编写开发人员使用的文档时,我们需要捕捉他们的兴趣,并引导他们尽快走上成功的道路。开发人员生态系统一直在为社区提供可交互的文档,用户可以一个地方阅读文档,运行代码并进行编辑。

在过去的2年里,.NET语言团队一直在不断发展Try .NET, 以支持在线和离线的交互式文档。

什么是Try .NET

Try .NET是一个基于.NET Core的交互式文档生成器。

阅读更多

背景

在我每次写技术类博文的时候,经常做的一件事就是创建模拟数据。在每篇博文中,为了解释某些概念,我需要创建许多模拟数据。这是一个我在实际中遇到的问题,因为我需要为我的程序找到一些合适的数据。有些时候,我会从数据库中找一些数据(Northwind和AdventureWorks都是我的好朋友^.^), 有些时候,我会使用一些现成的Json或者Xml数据,当然有时候我只能自己手动创建一些数据。

当然以上方案都不完美,也都不稳定,所以每次我都需要探索一些新方式来获取数据(对于学习来说这很好,但是维护起来确是一种灾难)。最后我找到了Bogus, 一个基于C#的简单数据生成器。使用Bogus生成模拟数据, 你只需要定义规则并生成数据即可,就是这么简单。而且Bogus可以生成固定数据或者变化数据。这样一旦你拿到了这些数据,你就可以把它们序列化成你想要的格式: json, xml,数据库或者文本文件。

阅读更多

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×