首页 > WEB扩展 > MVC > 正文

MVC使用Spring.Net应用IOC(依赖倒置)学习笔记3

2020-04-24 21:08:04
字体:
来源:转载
供稿:网友

      到现在,我们已经基本搭建起了项目的框架,但是项目中还存在一个问题,就是尽管层与层之间使用了接口进行隔离,但实例化接口的时候,还是引入了接口实现类的依赖,如下面的代码:

private IUserService _userService;private IUserService UserService{ get { return _userService ?? (_userService = new UserService()); } set { _userService = value; }}

        面向接口编程,Controller应该只依赖于站点业务层的接口,而不能依赖于具体的实现,否则,就违背了在层之间设置接口的初衷了。

       另外,如果上层只依赖于下层的接口,在做单元测试的时候,就可以用Moq,Fakes等Mock工具来按实际需求来模拟接口的实现,就可以灵活的控制接口的返回值来对各种情况进行测试,如果依赖于具体的实现,项目的可测试性将大大减小,不利于进行自动化的单元测试。

要不依赖于具体的实现,就不能使用通常的 T t = new T() 的方式来获得一个类的实例了,需要通过IOC容器来对对象生命周期,依赖关系等进行统一的管理,这里,我们将使用Spring.Net应用IOC。 

Spring.Net在控制台程序中的使用 

我们将通过一个简单的控制台示例来展示Spring.Net的使用方法

创建测试用的类:

namespace SpringNetDemo{ public interface IClass {  string Name { get; set; }  Student Monitor { get; set; }  string GetMsg(); } public class Class : IClass {  public string Name { get; set; }  public Student Monitor { get; set; }  public string GetMsg()  {   return "班级名称:" + Name + ",班长:" + Monitor.Name;  } } public class Student {  public string Name { get; set; } }}

两个类,一个接口,Student类中有一个string类型的属性,为Name,Class类中除了string类型的Name属性外还有一个Student类型的Monitor属性,方法GetMsg可以返回当前Class对象的简介,包括班级名和班长名两个内容。Class类实现IClass接口。 

先做简单的测试:

IClass c6=new Class(){ Monitor = new Student() {  Name = "李芙蓉" }, Name = "六班"};Console.WriteLine(c6.GetMsg());Console.ReadKey();

输出为:

接下来,我们换用Spring.Net容器来声明对象

1. 首先引用dll文件

   

需要核心库Spring.Core.dll和Spring.Net使用的日志记录组件Common.Logging.dll

2. 然后我们需要了解当前的程序集名称和命名空间

   

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表