MVC使用Spring.Net应用IOC(依赖反转)研究注释3
到目前为止,我们已经基本搭建好了项目的框架,但是项目中还有一个问题,那就是虽然使用了接口进行层与层之间的隔离,但是在实例化接口的时候,引入了接口实现类的依赖性,如下代码所示:
私有IUserService _ userService私有IUserService user service { get { return _ user service?(_ user service=new user service());}设置{ _ userService=value}}面向接口的编程,Controller应该只依赖站点业务层的接口,而不依赖具体的实现,否则就违背了层与层之间设置接口的初衷。
另外,如果上层只依赖下层的接口,在做单元测试的时候,可以根据实际需求,使用Moq、Fakes等Mock工具模拟接口的实现,灵活控制接口的返回值,测试各种情况。如果依赖于具体的实现,项目的可测试性会大大降低,不利于自动化单元测试。
不依赖于具体的实现,我们无法用通常的T t=new T()的方式得到一个类的实例,需要通过IOC容器统一管理对象的生命周期和依赖关系。在这里,我们将利用Spring.Net申请国际奥委会。
Spring.Net在控制台程序中的使用
我们将通过一个简单的控制台示例展示如何使用Spring.Net
创建一个测试类:
命名空间SpringNetDemo{公共接口IClass { string Name { get设置;}学生监视器{ get设置;}字符串GetMSg();}公共类Class : IClass {公共字符串Name { get设置;}公共学生监视器{ get设置;}公共字符串GetMsg(){ return ' class Name:' Name ',monitor:' Monitor。名称;} }公共类Student {公共字符串Name { get设置;}}}有两个类和一个接口。学生类有一个名为名称的字符串属性。除了字符串属性外,Class类还有一个名为Student的Monitor属性。GetMsg方法可以返回当前Class对象的简介,包括类名和监视器名。类实现了IClass接口。
先做一个简单的测试:
Iclass C6=新班级(){monitor=新学生(){name='李富荣' },name='六班' };控制台。WriteLine(c6。GetMsg());控制台。ReadKey();
输出为:
接下来,我们使用Spring.Net容器来声明对象
1.第一个引用dll文件
需要核心库Spring.Core.dll和Spring.Net使用的日志组件Common.Logging.dll
2.然后我们需要知道当前的程序集名称和命名空间
3.在项目中创建新的xml文件并命名为it services.xml:
?xml版本='1.0 '编码='utf-8 '?objects xmlns=' http://www . spring framework . net '描述一个演示简单IoC特性的示例。/description对象名称='Class '类型='SpringNetDemo。Class,Springnetdemo ' property name=' name ' value=' top class '/property name=' monitor ' ref=' student '/object object name=' student ' type=' Springnetdemo . student,Springnetdemo ' property name=' name ' value=' Chen Erdan '/object/objects在xml中创建新的对象根节点,其中添加了需要由容器生成的对象子节点。对象子节点的type属性需要指示类的完整名称(带有程序集)和当前命名空间。如果需要为当前类的属性分配默认值,可以在对象节点中添加一个属性节点,并配置其value属性,为类的属性分配初始值。如果该类的属性仍然是其他类对象,则可以创建一个这种类型的新对象节点并赋予它一个名称属性,然后将ref属性指向当前属性的属性节点中新添加的对象节点的名称属性。
注意:xml文件应该设置为“较新时复制”或“总是复制”,否则生成时不会自动复制到程序目录中
4.然后在应用程序配置文件中配置Spring.Net的信息:
?可扩展标记语言版本='1.0 '编码='utf-8 '?配置配置节组名='春天'节名=“上下文”类型='春天.上下文。支持。上下文处理程序,春天。核心/部分名称="对象"类型="弹簧"。上下文。支持。默认部分处理程序春天.核心/部分组/配置部分上下文资源uri=' file ://services。XML '/上下文/spring/配置
运行程序,得到输出结果:
成功实现国际奥林匹克委员会
春天。网在ASP .NET MVC中的使用
方法和在控制台程序中大同小异
1.同样,首先要导入dll文件
手动音量调节项目中需要引用的dll文件稍多些,需要五个,除了值钱的两个外,还需要三个网相关的dll。
2.为了便于管理,我们在手动音量调节项目更目录新建配置文件夹来保存配置文件,并在其中新建两个可扩展标记语言文件
controllers.xml:
?可扩展标记语言版本='1.0 '编码='utf-8 '?objects xmlns=' http://www。弹簧框架。net '、对象类型='PMS .控制器。用户控制器WebApp“singleton=”false”属性名称=“用户服务”ref=“用户服务”/object/objects services。XML:
?可扩展标记语言版本='1.0 '编码='utf-8 '?objects xmlns=' http://www。弹簧框架。“净”对象名称='UserService '类型='经前综合症.BLL .用户服务,经前综合症BLL ' singleton=' false '/object/objects同样是出于方便管理考虑,我们将控制器和业务类分两个文件来保存,文件中节点的规则与控制台示例中完全相同。
3.修改Web.config配置文件
在配置文件的配置部分节点中增加如图的sectionGrup节点,配置节点中增加春天节点,并在春天节点中的语境节点中使用资源节点设置配置文件的路径。
4.修改全球的文件
修改根目录的Global.asax文件,将最有价值球员应用程序类的父类由超文本传送协议(Hyper Text Transport Protocol的缩写)应用程序更改为springmvcapapplication。
复制代码代码如下:公共类最有价值球员应用程序: springmvp应用程序//HttpApplication
5.最后,将原来的控制器中代码修改,就成功地在手动音量调节项目中使用春天。网实现了国际奥林匹克委员会
//private IUserService _ user service;//私有IUserService用户服务//{//get { return _ user service?(_用户服务=新用户服务());}//设置{ _ userService=value}///}私有IUserService用户服务{ get设置;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:MVC使用Spring.Net应用IOC(依赖反转)研究注释3是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。