Autofac在WebApi,Winform中应用
安装注意事项
使用AOP的时候需要安装Autofac.Extras.DynamicProxy,如果发现VS老是提示报错,需要把VS重启下才可以识别。
WebApi
注意事项:WebApi中多一个ApiController中构造注入功能。
注入和AOP拦截
var siteNameList = ClassHelper.GetConstants(typeof(SiteName));//创建容器var builder = new ContainerBuilder();//Api接口注入
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注册api容器的实现var assemblys = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();//builder.RegisterAssemblyTypes(assemblys.ToArray())//查找程序集中以Service结尾的类型
//.Where(t => t.Name.EndsWith("Service"))
//.AsImplementedInterfaces();//拦截器注入builder.RegisterType<AOPInterceptor>();Type baseType = typeof(IDependency);//注册DLL并开启接口拦截,通过拦截器
// 获取所有相关类库的程序集
// 先注册匹配非工厂名开头的Service
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(type => baseType.IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract&& type.Name.EndsWith("Service")&& !siteNameList.Contains(type.Name.Substring(0, 4))).AsImplementedInterfaces().InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//InstancePerLifetimeScope 保证对象生命周期基于请求//后注册匹配工厂名开头的Service
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(type => baseType.IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract&& type.Name.EndsWith("Service")&& siteNameList.Contains(type.Name.Substring(0, 4)) && type.Name.Substring(0, 4) == AbstractFactory.siteConfig.SiteName).AsImplementedInterfaces().InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//InstancePerLifetimeScope 保证对象生命周期基于请求Autofac.IContainer container = builder.Build();var configuration = GlobalConfiguration.Configuration;//WebApi整个的解析依赖交给AutoFac //默认构造函数注入
configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册api容器需要使用HttpConfiguration对象//把所有类型都注册到AutoFac容器里,最后把整个项目的实例创建和解析依赖交给AutoFac,//这样AutoFac在创建控制器实例的时候根据参数类型(不注入的走无参构造函数),去容器取对应实例进行注入
ApiController中构造注入功能
public class PATController : ApiController
{private readonly IPATService patService;public PATController(IPATService _patService){patService = _patService;}
}
Winform
注意事项:直接以接口的方式进行注入。
注入和AOP拦截
public class AutofacBuilder{private static IContainer _container;public static void Init(){ContainerBuilder builder = new ContainerBuilder();// builder.RegisterType<Service1>().As<Service1>(); //这一句可以不要,因为下面已经把当前程序集下的类注入了ico容器//注册拦截器到容器builder.RegisterType<AOPInterceptor>();//在注册类型到容器的时候动态注入拦截器//builder.RegisterType<DeviceI>().As<IDevice>().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//注册当前程序集的所有类成员builder.RegisterAssemblyTypes(System.Reflection.Assembly.GetExecutingAssembly()).AsImplementedInterfaces().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));_container = builder.Build(); //只有在Build之后,才能调用Resolve<T>()}public static T Resolve<T>(){return _container.Resolve<T>();}}
相关文章:
Autofac在WebApi,Winform中应用
安装注意事项 使用AOP的时候需要安装Autofac.Extras.DynamicProxy,如果发现VS老是提示报错,需要把VS重启下才可以识别。 WebApi 注意事项:WebApi中多一个ApiController中构造注入功能。 注入和AOP拦截 var siteNameList ClassHelper.GetConstants(typeof(SiteName));//创建…...
uview ui 查看版号
版本查询2种方式 有两种方式可以查询到正在使用的uView的版本: // 通过console.log打印的形式 console.log(uni.$u.config.v);// 可以查阅uView的配置文件得知当前版本号,具体位置为: /uview-ui/libs/config/config.js...
Python 爬虫网页图片下载到本地
您可以使用Python的requests库来获取网页的源码,使用BeautifulSoup库来解析HTML,并使用urllib库来下载图片到本地。下面是一个示例代码: import requests from bs4 import BeautifulSoup import urllib # 获取网页源码 url https://examp…...
PyQt open3d 加载 显示点云
PyQt加载 显示点云,已经有三种方式,使用 open3d; 使用 vtk; 使用 pcl; 下面是使用 open3d: import sys import open3d as o3d import numpy as np import pyqtgraph.opengl as gl from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QFi…...
Linux搭建SSLVpn
安装http、ssl服务 编辑http配置文件 修改http的136行,276行以及990行 1、136行将监听端口注释 2、276行和990行修改为自己的域名和要访问的端口 修改http文档最后那部分 新添ssl配置信息,将端口修改为443(截图错了server.key应该放在/etc/…...
Qt5升级到Qt6分步迁移教程
Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用(如果不是现在,可能会在将来),因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…...
多线程学习之线程池
线程状态 线程状态具体含义NEW一个尚未启动的线程的状态。也称之为初始、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThread t new MyThread()只有线程对象,没有线程特征。RUNNABLE当我们调用线程对象的start方法,那么此时…...
Elasticsearch基础
1、简介 Elasticsearch是实时的分布式搜索分析引擎,内部使用Lucene做索引与搜索。 何谓实时?新增到 ES 中的数据在1秒后就可以被检索到,这种新增数据对搜索的可见性称为“准实时搜索”。分布式意味着可以动态调整集群规模,弹性扩…...
论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
前言 要弄清MAML怎么做,为什么这么做,就要看懂这两张图。先说MAML**在做什么?**它是打着Mate-Learing的旗号干的是few-shot multi-task Learning的事情。具体而言就是想训练一个模型能够使用很少的新样本,快速适应新的任务。 定…...
基于Web的旅游推荐网站设计与实现(论文+源码)_kaic
【摘 要】 当前,众所周知的旅游产业已慢慢成为全世界经济领域中最具代表影响力和最大领域的产业之一,互联网的蓬勃发展也为旅游业带来了新的机遇。并且旅游网站已经逐渐成为管理旅游信息的主要模式。因此,开发一个稳定性良好、可用性强的旅游…...
继承AndroidView Model的错误
ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码,总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索,终于找…...
智慧互联,有序充电--多场景充电
企业微电网能效及充电管理解决方案 安科瑞 崔丽洁 1、企业需求(目的地充电) 站在企业的角度,除了要主动承担碳达峰、碳中和的社会责任,也需要考虑自身的经营和利润,需要结合企业的现状进行改造 企业微电网平台——与…...
yum install libreoffice‘ returned a non-zero
The command ‘/bin/sh -c yum install libreoffice’ returned a non-zero code: 1 1. 异常信息 Is this ok [y/d/N]: Exiting on user command Your transaction was saved, rerun it with:yum load-transaction /tmp/yum_save_tx.2023-08-28.13-42.EftXfl.yumtx The comman…...
Linux知识点 -- 网络基础(一)
Linux知识点 – 网络基础(一) 文章目录 Linux知识点 -- 网络基础(一)一、网络发展二、协议1.OSI七层模型2.TCP/IP五层(或四层)模型 三、网络传输基本流程1.局域网中的两台主机通信流程2.跨网段的两台主机间…...
【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划
文章目录 8 分治算法8.1 【递归】剑指 Offer 07 - 重建二叉树8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数8.5 【归并排序】【分治】剑指 Offer 51 -…...
美创科技“签”手柠檬文才学堂,共推高校数据安全建设
近日,由柠檬文才学堂联合中国教育在线、东北财经大学网络教育学院共同主办的“三教统筹下高校继续教育数字化转型研讨”顺利召开。 国内高等院校(高职院校)继续教育分管领导,继续教育学院领导及继续教育信息化、教学教务管理、课程…...
【JAVA基础】数据类型,逻辑控制
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 数据类型整型变量 int长整型变量 long单精度浮点数 float双精度浮点数 double字符类型 char字节…...
计算机竞赛 基于图像识别的跌倒检测算法
前言 🔥 优质竞赛项目系列,今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…...
计算机竞赛 基于大数据的股票量化分析与股价预测系统
文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…...
input子系统
内核分三层 1、事件处理层 2、核心层 3、设备驱动层 当硬件按下,在设备驱动中触发中断,中断程序会将事件上报给核心层 核心层将事件给事件处理层,最后事件处理层控制app应用层的怎么操作将数据发送到用户空间...
紧急预警!YouTube已启动Sora 2生成内容专项识别模型(v2.3.1),你的视频是否在灰度检测池?立即自查清单
更多请点击: https://intelliparadigm.com 第一章:紧急预警!YouTube已启动Sora 2生成内容专项识别模型(v2.3.1),你的视频是否在灰度检测池?立即自查清单 YouTube 已于 2024 年 6 月 18 日凌晨正…...
从一张混乱的PLC图纸到清晰标注:EPLAN 2022 元件与IO点信息管理实操
从混乱到规范:EPLAN 2022 电气图纸标准化标注全流程指南 当接手一份标注混乱的PLC项目图纸时,许多工程师都会面临信息缺失、参数不统一、功能描述模糊等典型问题。这类"半成品"图纸不仅影响团队协作效率,更可能为后期维护埋下隐患。…...
Insights Imaging(IF=4.5)郑州大学第一附属医院高剑波等团队:基于CT的影像组学预测不可切除胃癌PD-1/PD-L1抑制剂联合化疗治疗反应
01文献学习今天分享的文献是由郑州大学第一附属医院高剑波教授等团队于2026年3月12日在《Insights into Imaging》(中科院2区,IF4.5)上发表的研究“CT-based radiomics for predicting the treatment response to PD-1/PD-L1 inhibitors comb…...
ARM架构MRS与MSR指令详解与应用
1. ARM寄存器操作指令概述在ARM架构中,处理器状态和系统配置通过特殊寄存器进行管理,包括CPSR(当前程序状态寄存器)、SPSR(保存的程序状态寄存器)和APSR(应用程序状态寄存器)。MRS和…...
乙烯基甲苯市场深度洞察:年复合增长率(CAGR)为5.7%(2026-2032)
乙烯基甲苯(VT)是乙烯基甲苯单体(间位与对位混合物),分子式C9H10,是一种低挥发、低毒性的环保型单体,可作为苯乙烯的替代物,用于制备不饱和树脂、涂料、绝缘漆及特种橡胶等。QYResea…...
深度学习优化算法(二)—— SGD + Momentum + Nesterov(三十四)
1. 定位导航 第 33 篇讲了为什么训练困难(病态、鞍点、梯度爆炸)。本篇正式介绍解决方案的第一波——三个经典优化算法: 算法 关键思想 年代 SGD 随机梯度估计 + 学习率衰减 1951(Robbins-Monro) Momentum 累积梯度方向加速 1964(Polyak) Nesterov 先"前瞻"再…...
【CLIP论文阅读】:基于自然语言监督的通用视觉预训练范式
论文信息 标题:Learning Transferable Visual Models From Natural Language Supervision会议:ICML 2021单位:OpenAI代码:https://github.com/OpenAI/CLIP论文:https://arxiv.org/pdf/2103.00020.pdf 一、引言&#x…...
Dify DSL 实战指南:从核心概念到智能客服工作流构建
1. 项目概述:从零开始理解与应用 Dify DSL如果你正在探索如何将复杂的 AI 应用流程标准化、可复用化,那么 Dify 的 DSL(领域特定语言)绝对是一个绕不开的利器。简单来说,Dify DSL 就是一套用 YAML 或 JSON 格式编写的“…...
如何用magnetW实现23个磁力站点的聚合搜索?一站式桌面应用完全指南
如何用magnetW实现23个磁力站点的聚合搜索?一站式桌面应用完全指南 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW magnetW是一款基于Electron框架开发的跨平台磁力链接聚合搜索工具ÿ…...
别再瞎测了!手把手教你用DTLZ和WFG测试函数集评估你的MOEA算法
多目标进化算法评测实战指南:DTLZ与WFG测试函数深度解析 1. 为什么需要标准测试函数集 在算法研究领域,我们常遇到一个尴尬现象:许多论文宣称提出的新算法性能优越,但实际应用中却表现平平。这种现象背后往往隐藏着"自说自话…...
