在上一章节,我们已经知道了再控制器中如何注入以及使用了。这一章,我们重点讲解下,如何在服务层中使用。

我们新定义一个教师类,在服务层中,通过这个教师类服务层,获取学生的年龄。实现在教师类的服务层中调用了学生类的服务接口对象。

新建一个教师类接口:ITeacherService.cs

namespace AutoFacTest.Service
{
public interface ITeacherService
{
int GetStudentAge(string name); }
}

接着定义一个 教师实现类,TeacherService.cs

   public class TeacherService:ITeacherService
{
/// <summary>
/// 定义学生接口服务类
/// </summary>
private readonly IStudentService _stu; /// <summary>
/// 实现构造函数注入
/// </summary>
/// <param name="stu"></param>
public TeacherService(IStudentService stu)
{
_stu = stu;
} /// <summary>
/// 调用学生类,获取学生信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public int GetStudentAge(string name)
{
return _stu.GetStudentAge(name);
} }

从上面的代码,我们可以看到我们在TeacherService的构造函数中已经实现了学生抽象类的注入。通过下一步在全局注入即可完成实例化。

下一步,在global中,新增教师类的注入

 private void AutoFacRegister()
{
var builder = new ContainerBuilder();
//注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
// builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
/*接口实现*/
builder.RegisterType<StudentService>().As<IStudentService>();
builder.RegisterType<TeacherService>().As<ITeacherService>();
//设置依赖解析器
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}

以上,我们就做好准备了。

下一步,界面显示

 public class HomeController : Controller
{
public IStudentService Stu { get; set; } //定义全局的学生抽象类对象
public ITeacherService Teac { get; set; }
/// <summary>
/// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
/// </summary>
// GET: Home
public void Index()
{
Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
Response.Write("教师类:"+Teac.GetStudentAge("张三")+"<br />");
}
}

然后浏览网页看结果:

已经实现了在服务层中的调用学生抽象类。这说明了一个点,autofac的注入是全局。

大家可能会发现在我们的global文件中,所有服务层的类都需要一个个注册,那如果很多类的话,那可写老长了。

autofac还提供的其他类型注入,下面就介绍我们的解决办法。

定义一个公共空接口 IDependency,所有实现类都集成这个接口。

namespace AutoFacTest.Service
{
/// <summary>
/// 空接口对象,用于一次性注入
/// </summary>
public interface IDependency
{
}
}

然后 学生类,和教师类都继承

  public class TeacherService:ITeacherService, IDependency
   public class StudentService:IStudentService, IDependency

在global中,换个方式进行注入

  private void AutoFacRegister()
{
var builder = new ContainerBuilder();
//注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
// builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
/*接口实现*/
// builder.RegisterType<StudentService>().As<IStudentService>();
// builder.RegisterType<TeacherService>().As<ITeacherService>(); //注册所有实现了 IDependency 接口的类型
Type baseType = typeof(IDependency);
Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
.AsSelf().AsImplementedInterfaces()
.PropertiesAutowired().InstancePerLifetimeScope();
//设置依赖解析器
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

最新文章

  1. android帧动画,移动位置,缩放,改变透明度等动画讲解
  2. ASP.NET MVC图片上传
  3. centos 安装 svn
  4. httpclient提示Cookie rejected: violates RFC 2109: domain must start with a dot
  5. haskell中的let和where
  6. Android概览
  7. HDU 1598 find the most comfortable road (MST)
  8. 【解决】org.apache.hadoop.hbase.ClockOutOfSyncException:
  9. VS2013中Django流水账笔记--配置环境
  10. python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor
  11. 原生js和jquery实现图片轮播特效
  12. 纯CSS打造淘宝导航菜单栏
  13. 【arc071f】Infinite Sequence(动态规划)
  14. iperf3 不支持双工模式
  15. [蓝桥杯]PREV-10.历届试题_幸运数
  16. VMware vCenter Server安装
  17. [Algorithm] How to use Max Heap to maintain K smallest items
  18. 1z0-052 q209_2
  19. 《FPGA全程进阶---实战演练》第二章之硬件平台的搭建
  20. ASP.NET Web API(C#)学习01

热门文章

  1. 201871010104-陈园园 《面向对象程序设计(java)》第七周学习总结
  2. 配置 application.properties
  3. style=&quot;position: relative;left:-5px; top: -5px;&quot;
  4. zz姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖
  5. LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组
  6. c#窗体之登录页(已连接数据库)
  7. 【redis】安装redis
  8. Mysql 时间和日期函数
  9. Linux--部署Django项目
  10. STL——sort函数的实现原理