学习笔记41_Spring.Net
Spring.Net:由容器负责创建对象,容器读取配置文件来初始化对象,配置文件须符合 Spring.Net范式;
准备材料: Common.Loggin.dll,Spring.Core.dll
第一步:配置app.config,一般可以去网上找一个标准的Spring.net配置文件看看
<Spring>
<context>
<resource uri="config://spring/objects">//说明容器的所有的对象在哪里配置的
<resource uri="file://Dals.xml">//此配置文件,也要放在app.config的统一目录下,而且文件也长得比较特殊
注意:对于配置文件的生成操作,如果以文件的方式,要对此文件的生成操作为嵌入资源或者始终生成
<resource uri="assembly://MyAssembly/projectName(一般也是程序集名)/xxxx.xml">//以程序集的xml方式
</context>
<objects xmlns="http://......">
<description>....</...>
<object name="一般为类型名" type ="namespace.xxxx.类名(类的全名称),namespace(所在程序集名称) " ></..>
</objects>
</<Spring>
第二步:使用容器创建实例
IApplicationContext ctx = ContextRegistry.GetContext();//其实就是程序集读取配置文件,创建Context
var dal = ctx.GetObject("类型名(name)") as namespace.xxxx.I类名;//其实一般要as一个接口类型,内部其实是程序集读取配置文件,在后边反射创建实例。
***就是由配置文件,决定创建什么样的,实现了某接口的实例
***所以配置文件中,要写得有规律,尽量能达到用查找/替换能一键替换的
***其他配置文件写法
<objects xmlns="http://....." xmlns:xsi="http://www.w3.org/...." xis:schemaLocation = "http://.....">
<object id="..." type="..."></object>
<object id="..." type="..."></object>
</objects>
Spring.Net注入方式:
属性注入:
<objects>
<object name="xxtype1" type="xxx.xxx.xxxtype">
<object name="xxtype" type="xxx.xxx.xxxtype">
<property name="Name" value="xxxxx">//简单属性的配置
<property name="复杂属性" ref="xxtype1"/>//复杂属性,与上边的xxxtype1相关联
</object>
<objects>
构造函数注入:
<object name="..." type="...">
<constructor-arg index="0" value="xxx">//给构造函数的第一个参数注入,一般情况下尽量很少用
</object>
****如果不使用构造函数,使用工厂创建的话,也可以配置
<objects>
<objcet name="Factory1" type="类全名,程序集名" singleton="true"></..>//单列模式
<object name ="xxxdal" type="类全名,程序集名" singleton="false" factory-method="getDal" factoryobject="Factory1"></..>
</objects>
********Spring.Net就是通过配置文件,实现各个项目层的彻底分离,运行的时候通过读取配置文件,程序集+类全名反射+接口定义,达到各个对象实例化,来实现各层项目之间的全分离,甚至不用项目之间的引用,只要生成的dll放到运行目录下即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现