在开始写之前,先给出spring.net官方网站,在那里有大家所需要的例子和教程。
Spring.Net有两个很重要的感念就是IoC(控制反转)和DI(依赖注入)。
控制反转通俗的讲就是将对象的控制权转移给外部容器,即控制权的转移。
例:
有一个IUser接口和一个继承了他的类UseDAO,传统的实现我们会采取直接实例化接口
或者通过一个工厂类来创建这个接口的实例。
IUser dal = UserFactory.CreateUserDao();
但通过spring.net的IoC实现,可以这么来写
IApplicationContext ctx =new XmlApplicationContext("~/SpringConfig/spring.xml"); IUser user = (IUser)ctx.GetObject("UserDAO")
这实际上就把UserDAO的实现交给容器处理。
上面只是简单的介绍了IoC的基本感念。具体应用看下面内容。
首先来看看项目结构

NSpring.AOP:AOP通知层
NSpring.Model:实体层
NSpring.IDAL:DAO接口层
NSpring.DAL:DAO层
NSpring.Service:服务层
NSpring.BLL:业务层
NSpring:Web前端
对于项目结构,在这里不做多说,只是为了演示Spring.Net的IoC和AOP的实现。如果有什么更好的建议,欢迎大家指正。
对于具体代码这里就不贴了,等下一起打包附上。只做一些关键部分。
spring.net的配置
在上面的配置文件中,<object>标签标示的是一个对象 id是这个对象的标示并且是唯一的,type指向这个对象的具体位置。
在上面的UserService中包含了属性和构造函数的注入,先来看看UserService类

UserService
1 namespace NSpring.Service 2 { 3 ///<summary> 4 /// 用户service 5 ///</summary> 6 publicclass UserService:IUserService 7 { 8 private IUser _user; 9 privatestring _msg; 10 privatestring _constructor; 11 12 //构造函数注入13 public UserService(string constructor) 14 { 15 this._constructor = constructor; 16 } 17 18 //通过属性注入 相当于替代了 IUser _user = new UserDAO把这个过程交给容器来处理19 public IUser User 20 { 21 get { returnthis._user; } 22 set { this._user = value; } 23 } 24 25 ///<summary>26 /// 消息内容通过属性注入 27 ///</summary>28 publicstring MsgInfo 29 { 30 get { returnthis._msg; } 31 set { this._msg = value; } 32 } 33 34 ///<summary>35 /// 添加用户 36 ///</summary>37 ///<param name="u"></param>38 ///<returns></returns>39 public User AddUser(User u) 40 { 41 return User.AddUser(u); 42 } 43 44 ///<summary>45 /// 发送消息 46 ///</summary>47 ///<returns></returns>48 publicstring SendMsg() 49 { 50 return"注入的MsgInfo值是:"+ MsgInfo +"<br/>"+"_constructor通过构造函数注入的值:"+ _constructor; 51 } 52 } 53 }
在代码中User属性和_constructor分别通过IoC容器来进行注入。
在配置文件23行开始是AOP(面向切面编程)的配置。关于具体概念可以参考中文文档和Spring.Net官网。
<object id="UserAdvice" type="NSpring.AOP.UserAdvice,NSpring.AOP"></object>
上面这句是配置一个通知类型,在这里用的是环绕通知(还有前置、异常、后置等通知)。
本例子只是做为spring.net的测试项目。对于spring.net的IoC和AOP的初步试验,更多关于spring.net的特性还是参考官方为准,那里提供了丰富的示例项目。
自己最近在学习spring.net,但是没有在实际的项目中使用过,因此对如何更好的使用spring.net的功能也不是很了解,希望有经验的朋友可以指点下。
代码下载和中文文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述