本文摘自PHP中文网,作者零下一度,侵删。
Spring.Net包括控制反转(IoC) 和面向切面(AOP),这篇文章主要说下IoC方面的入门。一、首先建立一个MVC项目名称叫SpringDemo,然后用NuGet下载spring(我用的是Spring.Net NHibernate 4 support)
二、类设计,在Models文件夹下面建立类,主要IUserInfo,UserInfo,Order 三个类代码如下:
1 2 3 | public interface IUserInfo
{string ShowMeg();
}
|
1 2 3 4 5 | public class UserInfo : IUserInfo
{ public string UserName { get; set; } public Order OrderBy { get; set; } public string ShowMeg()
{ return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
}
}
|
1 2 3 | public class Order
{ public string OrderNo { get; set; }
}
|
三、进入关键的一步:修改配置文件。在web.config里直接修改 如下:
1 2 3 4 5 | <sectionGroup name= "spring" > <!--解析spring块的对象--> <section name= "context" type= "Spring.Context.Support.ContextHandler,Spring.Core" /> <!--配置解析spring存放对象的容器集合--> <section name= "objects" type= "Spring.Context.Support.DefaultSectionHandler,Spring.Core" /></sectionGroup>
</configSections><!--****************** Spring 配置开始 ******************-->
<spring><context> <!--容器配置,配置当前容器对象放在上面位置:当前是在现在的配置文件中--> <resource uri= "config://spring/objects" /><!--当前--></context><objects xmlns= "http://www.springframework.net" > <!--这里存放容器所有节点--> <description>An example that demonstrates simple Ioc features</description> <!-- name 必须唯一 可以随意命名,一般为类型名称,type=类的全部名称,所在程序集,目的是为了让容器轻松的反射创建对象--> <object name= "UserInfo" type= "SpringDemo.Models.UserInfo,SpringDemo" ><property name= "UserName" value= "老王" /><!--ref 指向下面的属相注入--><property name= "OrderBy" ref= "Order" /> </object> <object name= "Order" type= "SpringDemo.Models.Order,SpringDemo" ><property name= "OrderNo" value= "20170808" /> </object></objects>
</spring>
<!--****************** Spring 配置结束 ******************-->
|
四、代码测试,新建控制器,代码如下:
1 2 3 4 5 6 | public ActionResult Index()
{
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfo lister = (IUserInfo)ctx.GetObject( "UserInfo" );
ViewBag.msg = lister.ShowMeg(); return View();
}
|
五、前台添加显示 @ViewBag.msg 运行结果如下:

六、前已经大功告成,但如果想把配置文件单独出来该怎么弄呢,为了达到测试效果新建一个类NewUserInfo 代码如下:
1 2 3 4 5 6 7 | public class NewUserInfo : IUserInfo
{ public NewUserInfo(string name, Order order)
{this.UserName = name;this.OrderBy = order;
} public string UserName { get; set; } public Order OrderBy { get; set; } public string ShowMeg()
{ return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
}
}
|
七、新建文件夹Config下建立objects.xml 属性设置生成到目录 内容如下:
1 2 3 4 5 6 7 8 9 10 11 | <?xml version= "1.0" encoding= "utf-8" ?><objects xmlns= "http://www.springframework.net" >
<!--这里存放容器所有节点-->
<description>An example that demonstrates simple Ioc features</description>
<!--构造函数注入-->
<object name= "NewUserInfo" type= "SpringDemo.Models.NewUserInfo,SpringDemo" ><constructor-arg index= "0" value= "张学友" /><constructor-arg index= "1" ref= "Order" />
</object>
<!--复杂依赖注入-->
<object name= "Order" type= "SpringDemo.Models.Order,SpringDemo" ><property name= "OrderNO" value= "20170909" />
</object>
</objects>
|
八、修改web.config 指定objects.xml为解析依赖
1 | <resource uri= "~/Config/objects.xml" /><!--指定文档-->
|
九、在Home控制器下建立Action NewUserInfo 代码如下:
1 2 3 4 5 6 | public ActionResult NewUserInfo()
{
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfo lister = (IUserInfo)ctx.GetObject( "NewUserInfo" );
ViewBag.msg = lister.ShowMeg(); return View();
}
|
十、前台添加显示 @ViewBag.msg 运行结果如下:

总结:IoC给我们带来了很多的方便,当我们觉得使用简单工厂不好的时候,可以用IoC来代替,而且大部分都支持AOP。
祝君好运
以上就是分享一个IoC入门教程实例的详细内容!
相关阅读 >>
.net中core如何利用redis发布订阅的实例分析
c#中在构造函数中访问虚成员有什么问题?
.net通过字典给类赋值实现代码
c# 5.0引入了两个关键字 --async和await
c#集合类有哪些?
lambda表达式进行对象结合操作的实例详解
使用c#操作windowad之的windows用户组
.net 玩单反的技巧
c# 并行任务之parallel类的实例介绍
c#简单工厂模式是什么?
更多相关阅读请进入《Spring.Net》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » 分享一个IoC入门教程实例