浅谈WPF依赖项属性
浅谈WPF依赖项属性0.引言依赖项属性虽然在使用上和CLR属性一样,但是它是WPF特有的,不同于CLR属性。只是封装为我们常用CLR的属性,在语法使用上和CLR属性一样。WPF中一些功能:动画,属性绑定,样式等都是以依赖项属性为基础的。WPF中元素的属性大部分都是依赖项属性。依赖项属性和CLR属性最主要的区别是:CLR属性是通过一个私有的字段来读取。而依赖项属性则是通过继承在DependencyObject的GetValue()和SetValue()方法动态的读取属性值。就是说当设置一个依赖项属性值时,并不是直接给一个对象的字段赋值,而是在一个DependencyObject对象的字典中设置键值对。Key值为属性的名称,Value值为你要赋值的值。为什么使用依赖项属性:减少内存当UI控件的90%以上的属性通常停留在初始值时,为每个属性存储字段会是一个巨大的消耗。依赖项属性则是只在实例中存储修改的属性,那些默认值只在依赖项属性中存储一次。(如字体属性,并不是每个元素都存储一个字体属性,字体属性只存储一次,其他元素则是继承该字体
小心DNS服务泄露了你的内网基础设施
反向解析公共IP–这里没有问题Tl;dr:有些域名名称服务器可能会在直接查询反向解析私有IP时暴露内部的IP地址和域名。用dig-x检查一下,或者使用privdns.py检查一下。一个简单的错误我最近犯了一个很小且看似不重要的错误:我试图连接某个公司的基础设施的服务器,但没有登录到他们的VPN。这看起来很无聊,你可能会觉得,这样的事情每天都在发生。但几个小时后,我正在编写Python代码,并且在大量扫描互联网上的DNS服务器。即使我最终没有取得成功(从安全的角度来看这是很好的结果),但这仍然是一个有趣的实验。那么到底发生了什么事。当我试图ping内部公司的服务器时,我得到了下面的回应:michael@seventysix:~pinginternal-db1.example.comPINGinternal-db1.example.com(10.0.0.1)56(84)bytesofdata.^C---internal-db1.example.compingstatistics---3packet
一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
前言Hi,大家好,还是星期五,还是Rector,又在图享网准时和大家见面了。今天给大家带来系列教程《一步一步创建ASP.NETMVC5程序[Repository+Autofac+Automapper+SqlSugar]》的第八期了,不知道你有没有按照教程将前七期的都实际练习一篇呢?如果是,你在练习的时候有没有遇到什么问题呢?反正Rector是有收到部分童鞋发来他们练习过程中的问题反馈的哦。如果你仔细阅读并实际练习了前面七期的教程,我相信,作为刚入门或者经验尚浅的你一定会有收获的。加油吧,骚年!!!人生苦短,就怕努力!!!Rector这是要成为心理导师的节奏啊,一来就给大家灌饱心灵鸡汤。。。**本文篇幅有点长,请作好心里准备!!!同时,也吐个槽,本文看似内容简单的一B,但也花了笔者几个小时来准备示例以及写作,写技术文章真心伤不起珍爱生命,远离程序!!!**还是回到我们的正题,开始我们今天的系列教程:《一步一步创建ASP.NETMVC5程序Repository+Autofac+Automapper+SqlSugar》本文
.Net 更容易的使用配置文件 SuperConfig
一、原始配置文件的问题我们在做开发时,不管是B/S还是C/S,现在几乎所有的项目都会碰到使用配置文件,简单点的如链接字符串、上传路径啊,一些API的接口地址等等。复杂点就更多了,如ActiveMQ的配置信息(地址、端口、用户名、密码)等等。在.Net开发中已经在(Web.config/App.config)中提供了相对完善的配置系统,简单的如:appSettings;复杂的如:section;相信大家一定用过,当然使用配置文件第一步先添加引用:“System.Configuration”;appSettings使用System.Configuration.ConfigurationManager.AppSettings[name]即可获取单个的配置项,可以说非常简单方便。section很多人也许很陌生,但是在开发中也许都碰到过,比如在使用EntityFramework时,会在configSections中添加一项sectionname为entityFramework一项配置。当然肯定可以自定义section,但在使用配置文件的sect
如何在 macOS 安裝 .NET Core ?
若有出現.NETCore版本,表示.NETCoreSDK安裝成功。Q&AQ:SDK與runtime有什麼差別?在.NETCore官網,的確分別提供SDK與Runtime兩種版本:SDK:SoftwareDevelopmentK,開發.NETCore所需要的版本,檔案較大Runtime:執行.NETCore所需要的版本,檔案較小簡單的說,SDK就類似AngularCLI,包含我們開發Angular所需要的指令;runtime就類似Angular本身執行所需要的檔案。Q:為什麼SDK與runtime版本不一樣?眼尖的人應該會發現目前SDK版本為2.1.4,但runtime版本為2.0.5,兩者版本並不一樣,這是合理的,如AngularCLI的版本與Angular版本也並不一致,截至目前為止,AngularCLI版本為1.6.7,而Angular版本為5.2.3,所以SDK與run
使用Mono将C#编译运行至WebAssembly平台
看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!因为所有的主流网页浏览器都支持WebAssembly,开发者们现在可以寻找一个新的平台来部署他们的应用程序。由WebAssembly团队提供的标准工具链仅能将C、C++编译成为WebAssembly,然而这对使用其他编程语言的开发者们并没有什么帮助。C#开发者就幸运的多了,Mono项目提供了两种不同的方法来对WebAssembly进行支持。第一种方法是通过使用MonoIL解释器在运行时(runtime)运行托管代码(例如C#)。这种方法的目标是支持快速原型化和快速开发。当应用程序已经准备交付给客户时,最好使用第二种方法。该方法使用静态编译生成一个WASM文件,该文件能够被支持WebAssembly的浏览器于本地进行执行。为了能够创建这些WASM文件,Mono项目中引入了一个叫做mono-wasm的新工具。它将C#语言作为输入,并且生成LLVM二进制代码,将其用于LLVMWebAssembly的后端。由mono-was
ASP.NET Core Web APi获取原始请求内容
前言我们讲过ASP.NETCoreWebAPi路由绑定,本节我们来讲讲如何获取客户端请求过来的内容。ASP.NETCoreWebAPi捕获Request.Body内容[HttpPost][Route("api/blog/jsonstring")]publicstringIndex([FromBody]stringcontent){returncontent;}//或者[HttpPost("api/blog/jsonstring")]publicstringIndex([FromBody]stringcontent){returncontent;}由上图我们能够看到发出的为Post请求且Content-Type为application/json,所以此时在后台接受请求需要通过【FromBody】特性接受来自Post请求中的Body内容。这里需要特别说明的是:当在Vue利用axios发出Post请求且参数为简单类型参数时,但是在后台只能利用对象接收,即不能按照如下形式接收参数。[HttpPost("api/
Vue 2.0学习笔记:创建Button组件
在上一节中,咱们学习了Vue中怎么创建组件。在这篇文章中我们以按钮组件为例,了解了怎么注册全局组件和局部组件。并且通过这些基础知识,可以轻易的创建类似于HTML中button元素效果的按钮组件。但这个组件非常的简陋,和我们想像的组件相差甚远。那么今天我们来看看,怎么在Vue中创建一个按钮组件。以Bootstrap的按钮为例很多人说Bootstrap很拙逼,灵活性不够。但我不这么认为,我是Bootstrap的粉丝,我一直很推崇Bootstrap。并不是因为其效果有多牛逼,我膜拜的是他的设计思想。别的不多说了,今天我们的目的是使用Vue来创建一个按钮组件。那么我们就用Bootstrap的按钮来举例。在Bootstrap中的按钮分为Buttons和Button组两个组件,今天先来看Buttons组件。先来简单的回忆Bootstrap的Buttons组件,其效果和使用方式如下:简单分析该组件是从Bootstrap4中获取的。正如上图所示,按钮中有很多不同的类和参数,所以我们将创建一个组件来完成。该组件是可以双向绑定的,也可以
应该抛出什么异常?(.NET/C#)
我在.NET/C#建议的异常处理原则中描述了如何catch异常以及重新throw。然而何时应该throw异常,以及应该throw什么异常呢?究竟是谁错了?代码中从上到下从里到外都是在执行一个个的包含某种目的的代码,我们将其称之为“任务”。当需要完成某项任务时,任务的完成情况只有两种结果:成功完成失败异常处理机制就是处理上面的第2种情况。这里我们不谈论错误码系统,那么,异常便应该在任务执行失败时抛出异常。抛出异常后,报告错误只是手段,真正要做的是帮助开发者修复错误。于是,第一个要做的就是区分到底——谁错了!任务的使用者用错了任务的执行代码写错了任务执行时所在的环境不符合预期简单说来,就是:使用错误,实现错误、环境错误。让我们把异常归类到这些错误中本文的重点在于指导我们何时应该抛出什么异常,也就是说——我们的角色是——任务的编写者。那么,编写者有责任编写出一段没有错误的代码。这就说明——永远不应该抛出表示自己写错了的异常。那么,我们对常见的异常进行分类。使用错误ArgumentExce
[UWP]新控件ColorPicker
1.前言FallCreatorsUpdate中提供了一个新得ColorPicker控件,解决了以前选择颜色只能用ComboBox的窘境。2.一个简单的例子
.NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一下进化史了1:委托异步多线程,所有的异步都是基于委托来实现的#region委托异步多线程{//委托异步多线程Stopwatchwatch=newStopwatch();watch.Start();Console.WriteLine($"开始执行了,{DateTime.Now.ToString("yyyy-MM-ddHH:mm:ssffff")},,,,{Thread.CurrentThread.ManagedThreadId}");Action
ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容。下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了。其中绿色的部分就是上文中新实现的部分,包括一个简单的EventStore,一个事件处理器执行上下文的接口,以及一个基于ASP.NETCore依赖注入框架的执行上下文的实现。接下来,我们打算淘汰PassThroughEventBus,然后基于RabbitMQ实现一套新的事件总线。事件总线的重构根据前面的结论,事件总线的执行需要依赖于事件处理器执行上下文,也就是上面类图中PassThroughEventBus对于IEventHandlerExecutionContext的引用。更具体些,是在事件总线订阅某种类型的事件时,需要将事件处理器注册到IEventHandlerExecutionContext中。那么在实现RabbitMQ时,也会有着类似的设计需求,即RabbitMQEventBus也需要依赖IEventHandlerExecution
SSL在nginx和IIS下的配置与Renew
nginx下推荐用cert-auto,傻瓜模式,按照命令来就行了。cert-auto的基本验证模式是在网站的目录下创建一个._acme-challenge的文件夹,里面会有一些验证信息。关键的是,要确保你的网站是可以通过80端口正常访问的,因为它会去验证这个文件。如果不能验证呢?可以通过添加DNSTXT记录的方式执行。https://www.sslforfree.com网站是个不错的通过添加TXT记录的方式手动添加SSL证书的选择。1.访问网站,选择DNS手动验证模式。根据提示,在域名管理后台添加TXT记录。2.验证通过点击下载会产生三个文件:private.keycertificate.crtca_bundle.crt3.nginx下使用pem格式,则使用:opensslrsa-inprivate.key-text>private.pem4.fullchain.pem=certificate.crt+ca_bundle.crt,把文本添加起来即可。https://www.di
【ASP.NET Core】MVC中自定义视图的查找位置
【ASP.NETCore】MVC中自定义视图的查找位置.NETCore的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽。老周主要扯一下大伙伴们在入门的时候可能会疑惑的内容。ASP.NETCore可以在一个项目中混合使用WebPages和MVC,这是老周最希望的,因为这样会变得更灵活。WebPages类似于我们过去的Web开发方式,以页面为单位,此模型侧重于功能划分。而MVC侧重于数据,有什么样的数据模型就有什么样的Controller,有什么样的Controller就会对应什么样的Action,而Action又会有对应的UI,即View。所以说MVC是以数据为核心的。如果两者可以同时使用,那在我的项目中,可能有些内容以功能为重点,而另一些内容是以数据为中心的,这样可以灵活地交替使用,因此,老周向来最喜欢空项目模板,因为空的什么都没有,什么都没有才能做到什么都有。大概,老庄所说的“
Node.js调用C#代码
Node.js调用C#代码在Node.js的项目中假如我们想去调用已经用C#写的dll库该怎么办呢?在这种情况下Edge.js是一个不错的选择,Edge.js是一款在GitHub上开源的技术,它允许Node.js和.NETcore在同一个进程内相互调用,并且支持Windows,MacOS和Linux。本地可以通过npm直接安装Edge.js,地址:https://www.npmjs.com/package/edge#windows,上面有关于它的详细介绍,里面有好多的使用情况,下文主要简单介绍其中的一种使用方法来让Node.js调用C#的dll库。1.安装Edge.jsnpminstalledge2.Edge.js使用方法varclrMethod=edge.func({assemblyFile:'',//程序集dll的名称typeName:'',//类名,如果不指定,默认会找’Startup‘类methodName:''//方法名,方法必须是Func
你可能不知道的.Net Core Configuration
目录执行原理环境变量SpringCloudConfigServer挂卷VolumeConfigServervsVolume执行原理1.配置读取顺序:与代码先后顺序一致。publicStartup(IHostingEnvironmentenv){varbuilder=newConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json",false,true).AddJsonFile("cussettings.json",false,true);Configuration=builder.Build();}以上代码会先读取appsettings.json,再读取cussettings.json,cussettings.json的内容会覆盖appsettings.json的内容。2.覆盖逻辑:原有的配置继承,相同的配置覆写,新增的配置添加。appsettings.json:
ASP.NET Core 2.0 下进行插件化开发
上次研究Asp.NetMVC插件化开发简化方案只是一个开始,最近发布了.NETCore2.0,正好趁热打铁,研究.NETCore2.0下的插件化开发方案。研究环境Windows10HomeViusalStudio2017Community15.3.3.NETCore2.0.NETCore和ASP.NETCore都不是新鲜事,但版本2绝对是新鲜事。按微软及其它一些软件公司的习惯,通常都是第2个版本才趋于稳定(比如WinMe后的WinXP,Office2007后的2010,还有Sun的Java2等)。以前对.NETCore1.x和ASP.NETCore1.x一直是学习、了解和观望的态度,随着2.0的发布,是时候将态度变得主动一些了。ASP.NET2.0带来了一个令人激动的新特性,RazorPage。创建ASP.NETCoreWeb应用程序的时候,可以选择基于RazorPage的Web应用程序和加入了MVC框架的
asp.net core合并压缩资源文件引发的学习之旅
0.在asp.netcore中使用BuildBundlerMinifier合并压缩资源文件在asp.netmvc中可以使用Bundle来压缩合并css,js不知道的见:http://www.cnblogs.com/morang...在asp.netcore中则可以使用BuildBundlerMinifier来进行css,js的压缩合并新建一个core项目可以看到一个根目录下面有一个bundleconfig.json配置文件,看名字大概也猜到了几分,点开json文件中的链接,果然就是它~官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/client-side/bundling-and-minification好的。接下来跟着文档试试看1.在vs中下载安装扩展重启vs2017,卧槽。一遍又一遍无响应..幸好还有其他路可以走...2.使用NuGet安装BuildBundlerMinifier使用命令dotnetaddpackageBuildBundlerMini
centos7下asp.net core 2.0使用httpclient访问https资源
环境centos764dotnetcore2.0.3问题微信支付时需要使用证书访问接口,报如下错误:System.PlatformNotSupportedException:Thehandlerdoesnotsupportclientauthenticationcertificateswiththiscombinationoflibcurl(7.29.0)anditsSSLbackend("NSS/3.28.4").分析提示很明显,是因为操作系统的libcurl不支持ssl造成的。解决安装openssl并生成lib库安装curl到指定版本具体过程,请参考https://www.latoooo.com/xia_z...最核心的点,安装完成后要将curl的lib下的so文件复制到/usr/lib,或者加到lib搜索目录中。总结linux也跟windows一样,有支持的库,windows上就是一个个的dll,而linux就是so文件。
码云推荐 |北大实验室开源的 AVS2 高清实时解码器
CompileitWindowsUseVS2013orlatestversionofvisualstudioopenthe./build/vs2013/davs2.slnsolutionandsetthedavs2asthestartproject.NotesAshellexecutor,i.e.thebashingitforwindows,isneededandshouldbefoundinPATHvariable.Forexample,thepathC:\ProgramFiles\Git\bincanbeaddedifgit-for-windowsisinstalled.vsyasmisneededand1.2.0issuggestedforwindowsplatform.Itcanbedownloadedthrough:http://yasm.torta