在.framework框架下的winfrom中使用Castle.DynamicProxy实现AOP问题小记

这篇具有很好参考价值的文章主要介绍了在.framework框架下的winfrom中使用Castle.DynamicProxy实现AOP问题小记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.需求:为项目中通讯PLC模块实现AOP,实现统一的日志打印,参数校验,方法执行时间统计

2.问题:①现有项目没有IOC容器,没法使用部分AOP库的方法注册到IOC,(注:如果要实现IOC对现有代码改动大,并且AOP只是针对部分模块实现)②要在尽量小的代码改动下实现

针对以上问题选择使用Castle.DynamicProxy

3.实现:

①项目中所有通讯PLC(西门子、三菱、汇川等)的类都实现了统一接口PlcConnect

②通过代理模式统一对外暴露一个代理类PlcConnectProxy 

③网上有许多关于Castle.DynamicProxy是怎么使用的,这里就不一一描述了,说一下我是怎么用的。

我是创建了一个Interceptor的类继承了StandardInterceptor,也可以实现IInterceptor,都没问题,StandardInterceptor也是实现IInterceptor这个接口。

 public class Interceptor : StandardInterceptor
 {
     protected override void PreProceed(IInvocation invocation)
     {
         // 方法执行前
     }

     protected override void PerformProceed(IInvocation invocation)
     {
         try
         {
             // 方法执行
             base.PerformProceed(invocation);
         }
         catch (Exception ex)
         {
             HandleException(ex);
         }
     }

     protected override void PostProceed(IInvocation invocation)
     {
         // 方法执行后
     }

     private void HandleException(Exception ex)
     {
         // 方法异常捕获
     }
 }

再定义一个静态类ProxyExtension创建拦截器

public static class ProxyExtension
{
    public static T GetHslAOPProxy<T>(this T t) where T : class
    {
        return new ProxyGenerator().CreateClassProxy<T>(new Interceptor());
    }
}

然后代理类在new的时候.GetHslAOPProxy()就可以

new PlcConnectProxy().GetHslAOPProxy()

4.带来问题

new PlcConnectProxy().GetHslAOPProxy()

PlcConnectProxy写成了单例但在创建时会初始化两个对象,导致被代理类有了两个,而我的需求是要保证被代理类是一个单例,破坏了单例模式。

原因:.GetHslAOPProxy()在调用时会生成一个子类继承父类方法来实现AOP。
解决:将所有通讯PLC(西门子、三菱、汇川等)的类写为单例,保证被代理类类只会生成一个(但又有个问题:虽然被代理类确实只有一个了,但PlcConnectProxy还会有两个,一个父类,一个子类)文章来源地址https://www.toymoban.com/news/detail-823773.html

到了这里,关于在.framework框架下的winfrom中使用Castle.DynamicProxy实现AOP问题小记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#】.Net Framework框架下使用SQLike以及基本概念

    2023年,第32周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 在C#的.NET Framework框架下,有很多轻量级数据库选择,比如:SQLike就是其中一款,一起来了解SQLike的简单使用吧。 轻量级数据库是指具有较小的存储需求、资源消耗较低、易于部署和使用的数据

    2024年02月11日
    浏览(64)
  • 切换.net Framework 版本后,出现NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

    由于添加新的dll文件,依赖的.NET Framework版本与当前的不一致,在vs 中切换了目标框架版本后,运行程序,出现以下的warnning信息: 一些 NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装。有关详细信息,请访问 https://docs.nuget.org/docs/workflows/reinstalling

    2024年02月16日
    浏览(36)
  • 如何在Python编程中应用Linux环境下的框架,以实现高效算法?

    python是一种广泛使用的编程语言,能够帮助开发人员快速开发高效的算法。与此同时,linux环境下提供了许多优秀的框架,可以进一步提高Python编程的效率。本文将介绍如何在Python编程中应用Linux环境下的框架,以实现高效算法。 一、Python和Linux环境的优势 Python是一种易学易

    2024年02月05日
    浏览(34)
  • 不同版本的 .NET Framework 下的 csc编译器的版本

    以下是不同版本的 .NET Framework 下的 csc.exe 编译器的版本: .NET Framework 2.0 - 3.5: csc.exe 版本:2.0.xxxxxx .NET Framework 4.x: .NET Framework 4.0: csc.exe 版本:4.0.xxxxxx .NET Framework 4.5 - 4.8: csc.exe 版本:4.0.xxxxxx .NET Framework 4.5.1 以及更新版本(4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8): csc.exe 版本

    2024年02月12日
    浏览(31)
  • 解决Unity游戏开发使用Visual Studio Enterprise 2022提示未找到目标框架.net framework4.7.1问题

    采用Visual Studio Installer安装Visual Studio Enterprise 2022,安装中勾选游戏下Unity游戏开发。 单个组件中确保勾选.NET Framework 4.7.1目标包 安装位置自定义修改至F盘后使用Visual Studio Enterprise 2022登录,在Unity设置使用Visual Studio Enterprise 2022并打开对应项目文件,提示未找到目标框架.net

    2024年02月10日
    浏览(46)
  • Gin框架: 使用go-ini配置参数与不同环境下的配置部署

    关于 INI 配置文件与go-ini 1 )概述 在INI配置文件中可以处理各种数据的配置 INI文件是一种简单的文本格式,常用于配置软件的各种参数 go-ini 是地表 最强大、最方便 和 最流行 的 Go 语言 INI 文件操作库 Github 地址:https://github.com/go-ini/ini 官方文档: https://ini.unknwon.io/ 使用示例

    2024年02月22日
    浏览(32)
  • Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别

    概要 在 Android Open Source Project (AOSP) 源代码中,frameworks/base/packages 和 packages/apps 目录都包含 Android 系统中的应用程序,但它们在性质和用途上有一些区别: 1,frameworks/base/packages frameworks/base 目录包含 Android 系统的核心框架代码。 frameworks/base/packages子目录包含系统级应用程序或

    2024年02月09日
    浏览(26)
  • .Net Framework使用Autofac实现依赖注入

    最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做一个学生信息增删改查系统。因为题目要求了用Entityframework 也就是EF 那也就不上core了,web项目也是用Framework 4.8去做的。 本文的重点是IOC容器,在Framework 中是没有自带的

    2024年02月09日
    浏览(37)
  • .Net FrameWork 框架下使用System.Net.Mail封装类 发送邮件失败:服务器响应:5.7.1 Client was not authenticated 解决方案

    偶然兴起,想做一个后台监控PLC状态的服务。功能如下:监控到PLC状态值异常后触发邮件推送,状态改变后只推送一次。开始使用的是.net6.0开发框架开发,一切都很顺利,邮件也能正常推送。但由于现场工控机系统不是WIN10 20H2的最新版本,导致系统未安装.Net6.0 Runtime。而我

    2024年02月03日
    浏览(35)
  • 使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6 框架下的 WPF项目 为安装文件

    目录 更新说明(2024/01/22) 序言 一、还是安装Visual Studio Installer Projects 2022插件 二、创建Setup Project项目 2.1 在现有解决方案中添加Setup Project项目 2.2 (更新)添加需要打包的文件  2.2.1 准备添加输出项。 2.2.2 【核心】添加 WpfMain 项目输出。 2.2.3 添加 WpfPluginManager 项目输出。

    2024年02月03日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包