背景: 查找了很多库,要么收费,要么太旧用不了。 经过大量测试,写了打印机的相关代码。 实现的代码不依赖于第三方库。 核心代码 引入这两个库: System.Drawing.Printing Vanara.PInvoke.Printing 这两个库用于使用 winspool.drv 服务,可以避免编写大量 库函数调用代码。 首先编写基础代码: public class PrinterBase { /// <summary> /// 获取默认打印机 /// </summary> /// �…

2022年12月3日 0条评论 2305点热度 4人点赞 痴者工良 阅读全文

goioc 介绍 goioc 是一个基于 GO 语言编写的依赖注入框架,基于反射进行编写。 支持泛型; 简单易用的 API; 简易版本的对象生命周期管理,作用域内对象具有生命; 延迟加载,在需要的时候才会实例化对象; 支持结构体字段注入,多层注入; 对象实例化线程安全,作用域内只会被执行一次。 下载依赖: go get -u github.com/whuanle/goioc v2.0.0 快速上手 定义接口: type IAnimal interface { Println(s string) } 实现接口: ty…

2022年11月27日 0条评论 888点热度 0人点赞 痴者工良 阅读全文

背景: 打不开远程设置。 也打不开 gpedit.msc。 修复命令(cmd): @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Pack…

2022年11月26日 0条评论 1282点热度 0人点赞 痴者工良 阅读全文

WorkflowDefinitionValidator 是整个验证入口,上一个非常复杂的对象结构。 参考:https://github.com/serverlessworkflow/specification/blob/main/specification.md 通过依赖注入,继续检查下一层的字段。 /// <summary> /// Represents the service used to validate <see cref="WorkflowDefinition"/>s /// &…

2022年11月24日 0条评论 1080点热度 0人点赞 痴者工良 阅读全文

代码示例如下: System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; services.ConfigureAll<HttpClientFactoryOptions>(options => { options.HttpMessageHandlerBuilderActions.A[......]继续阅读

2022年11月22日 0条评论 1490点热度 0人点赞 痴者工良 阅读全文

建立链路 SDK 官方仓库地址: https://github.com/open-telemetry/opentelemetry-go 设计一个这样的执行流程: Run 先后执行 Run1、Run2: a.Run1(newCtx) a.Run2(newCtx) Run1 中,还执行了另一个函数 Run1-1。 使用 opentelemetry SDK 的代码示例如下: package main import ( "context" "go.opentelemetry.io/otel" "io" "log" ) //…

2022年11月20日 0条评论 2034点热度 1人点赞 痴者工良 阅读全文

使用示例: package main import ( "fmt" "os" "os/signal" ) func main() { // Set up channel on which to send signal notifications. // We must use a buffered channel or risk missing the signal // if we're not ready to receive when the signal is sent. c := make(chan os…

2022年11月20日 0条评论 3088点热度 1人点赞 痴者工良 阅读全文

使用 Go 中常用的 log 方法: Print/Printf/Println : 打印日志信息 Panic/Panicf/Panicln : 打印日志信息后,以拼装好的字符串为参数调用 Panic Fatal/Fatalf/Fatalln : 打印日志信息后,os.Exit(1) 退出程序 New 一个 Logger 的定义如下: func New(out io.Writer, prefix string, flag int) *Logger { return &Logger{out: out, pref…

2022年11月20日 0条评论 1173点热度 0人点赞 痴者工良 阅读全文

首先在要被执行的 类型 加上参数: [Option(Description = "CloudEvents 'source' (default: urn:example-com:mysource:abc)", LongName = "source", ShortName = "s")] private string Source { get; } = "urn:example-com:mysource:abc"; [Option(Description = "CloudEvents 'type' (default: …

2022年11月19日 0条评论 1260点热度 0人点赞 痴者工良 阅读全文

引入这个库: YamlDotNet 配置示例: services.AddYamlDotNetSerializer( serializer => serializer .IncludeNonPublicProperties() .WithTypeConverter(new OneOfConverter()) .WithEmissionPhaseObjectGraphVisitor(args => new Cha[......]继续阅读

2022年11月19日 0条评论 1384点热度 0人点赞 痴者工良 阅读全文

从 ServerlessWorkflow 中学习到一个有趣的 NewtonsoftJson 配置。 var newtonsoftJsonDefaultConfig = (JsonSerializerSettings settings) => { settings.ContractResolver = new NonPublicSetterContractResolver(); settings.NullValueHandling = NullValueHandling.Igno[......]继续阅读

2022年11月19日 0条评论 1156点热度 1人点赞 痴者工良 阅读全文

ISO8601 规定了时间格式。 在 Go 语言中,Duration 就实现了这种时间格式。 package main import ( "fmt" "time" ) func main() { t := time.Now() fmt.Println(t) } 输出: 2022-11-19 02:59:28.201938781 +0000 UTC m=+0.000051897 在 C# 中,可以通过引用 Iso8601DurationHelper 来实现 Duration。 var duration = Durat…

2022年11月19日 0条评论 2350点热度 0人点赞 痴者工良 阅读全文

背景 突然了解到有个项目叫 ServerlessWorkflow 。 https://github.com/serverlessworkflow 这个项目有什么用,并不重要,重要的是可以从这里了解到云原生中间件开发的一些现状和需要学习的知识。 因为这个项目是 CNCF 项目,里面使用到的规范、思想、协议,也可以很好地体现当前 CNCF 的趋势。 ServerlessWorkflow 是一个 CNCF 发起的工作流协议,然后现在使用了 C# 实现了这个协议。 https://github.com/serverless…

2022年11月19日 0条评论 1506点热度 1人点赞 痴者工良 阅读全文

首先打开 /etc/kubernetes/pki 目录,里面会有很多证书。 执行命令查看当前证书允许通过哪些地址访问 APIServer: openssl x509 -in apiserver.crt -noout -text|grep -A 2 'Alternative' 可以看到证书允许的都是些内网 IP、本地 DNS 等。 备份好当前的密钥和客户端证书: mv apiserver.crt apiserver.crt.bak mv apiserver.key apiserver.key.bak 修改 kubea…

2022年11月18日 0条评论 1136点热度 0人点赞 痴者工良 阅读全文

示例代码如下: void Main() { string pName = "程序的名称"; Process[] temp = Process.GetProcessesByName(pName); if (temp.Length > 0) { IntPtr handle = temp[0].MainWindowHandle; SwitchToThisWindow(handle, true); } } [DllImport("user32.dll")] public static extern void Swit…

2022年11月16日 0条评论 1248点热度 0人点赞 痴者工良 阅读全文

创建一个元素: <Label x:Name="Label1" Text="111" VerticalOptions="Center" HorizontalOptions="Center" /> <Button Text="点击" Clicked="OnButtonClicked"></Button> 定义一个模型,继承 INotifyPropertyChanged。 public class A : INotifyPrope[......]继续阅读

2022年11月14日 0条评论 1264点热度 0人点赞 痴者工良 阅读全文

package main import ( "context" "fmt" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "os" ) func main() { kubeconfig := "config" config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err !=…

2022年11月13日 0条评论 790点热度 0人点赞 痴者工良 阅读全文

在下面这个示例中,定时器每 1 秒向 channel 发生一次消息。当数量达到 10 次时,会自动终止。 func main() { fmt.Println("Commencing countdown.") tick := time.Tick(1 * time.Second) for countdown := 10; countdown > 0; countdown-- { v := <-tick fmt.Println(countdown, v) } } 但是,如果需要中途取消,则需要使用 selec…

2022年11月13日 0条评论 1042点热度 0人点赞 痴者工良 阅读全文

MYSQL 数据库事务支持以下几种隔离级别: Read Uncommitted(读取未提交内容) Read Committed(读取提交内容) Repeatable Read(可重读) Serializable(可串行化) 每个会话中,都可以设置事务的隔离级别,如果不设置,就会使用数据库默认的隔离级别。 查询数据库默认隔离级别: show variables like 'transaction_isolation'; SELECT @@transaction_isolation 在当前会话中,设置事务的隔离级别: …

2022年11月11日 0条评论 878点热度 0人点赞 痴者工良 阅读全文

问题背景 在 Windows 中,开发的应用可以使用 app.manifest 资产文件配置程序启动时,使用何种角色权限启动。 效果如下: 正常情况下,在 app.manifest 加上以下配置即可: 如果项目中没有这个文件,可以在项目中新建项-清单文件。 <trustInfo xmlns='urn:schemas-microsoft-com:asm.v2'> <security> <requestedPrivileges xmlns='urn:schemas-microsoft-co…

2022年11月10日 0条评论 1734点热度 0人点赞 痴者工良 阅读全文
13456726