介绍

该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入。注入方式通过构造函数。在编写 aufofac 的依赖注入代码之前先准备一些基础类。

基础类

  1. public class UserInfo
  2. {
  3. public int Id { get; set; }
  4.  
  5. public string Name { get; set; }
  6. }
  1. public interface IRepository<T>
  2. {
  3. void Add( T item );
  4.  
  5. void Modifty( T item );
  6.  
  7. List<T> Find( Expression<Func<T, bool>> predicate = null );
  8. }
  9. public interface IProductRepository:IRepository<ProductInfo>
  10. {
  11.  
  12. }
  13. public class ProductRepository : IProductRepository
  14. {
  15. private static List<ProductInfo> _products = new List<ProductInfo>();
  16.  
  17. public void Add( ProductInfo item )
  18. {
  19. _products.Add( item );
  20. }
  21.  
  22. public List<ProductInfo> Find( Expression<Func<ProductInfo, bool>> predicate = null )
  23. {
  24. if ( predicate == null ) return _products;
  25.  
  26. return _products.Where( predicate.Compile() ).ToList();
  27. }
  28.  
  29. public void Modifty( ProductInfo item )
  30. {
  31. var product = _products.Find( u => u.Id == item.Id );
  32.  
  33. if ( product == null ) return;
  34.  
  35. product.Name = item.Name;
  36. }
  37. }
  1. public interface IAppService<T>
  2. {
  3. void Add( T item );
  4.  
  5. void Modify( T item );
  6.  
  7. List<T> Find( Expression<Func<T, bool>> predicate = null );
  8. }
  9. public interface IProductAppService:IAppService<ProductInfo>
  10. {
  11.  
  12. }
  13. public class ProductAppService : IProductAppService
  14. {
  15. public IProductRepository ProductRepository { get; set; }
  16.  
  17. public void Add( ProductInfo item )
  18. {
  19. this.ProductRepository.Add( item );
  20. }
  21.  
  22. public List<ProductInfo> Find( Expression<Func<ProductInfo, bool>> predicate = null )
  23. {
  24. return this.ProductRepository.Find( predicate );
  25. }
  26.  
  27. public void Modify( ProductInfo item )
  28. {
  29. this.ProductRepository.Modifty( item );
  30. }
  31. }
  1. public class ProductController : Controller
  2. {
  3. public IProductAppService ProductService { get; set; }
  4.  
  5. public ActionResult Index()
  6. {
  7. this.ProductService.Add( new ProductInfo { Id = , Name = "Lumia" } );
  8.  
  9. return View("~/Views/Product/Index.cshtml");
  10. }
  11. }

属性注入代码

以下代码中 PropertiesAutowired() 方法就是实现了属性注入的核心,从单词字面意思就可以看出其用意。

  1. private void _InitIoC()
  2. {
  3. var builder = new ContainerBuilder();
  4.  
  5. builder.RegisterControllers( typeof( MvcApplication ).Assembly )
  6. .PropertiesAutowired();
  7. builder.RegisterAssemblyTypes( typeof( MvcApplication ).Assembly )
  8. .Where( t => (t.Name.EndsWith( "Repository" ) || t.Name.EndsWith("AppService")) && !t.IsAbstract )
  9. //.InstancePerDependency() //每次都创建一个对象
  10. //.SingleInstance() //每次都是同一个对象
  11. //.InstancePerLifetimeScope() //同一个生命周期生成的对象是同一个
  12. .InstancePerRequest() //单个 Web / HTTP / API 请求的范围内的组件的共享一个实例。仅可用于支持每个请求的依赖关系的整合(如MVC,Web API,Web Forms等)。
  13. .AsImplementedInterfaces()
  14. .PropertiesAutowired();
  15.  
  16. var container = builder.Build();
  17. var resolver = new AutofacDependencyResolver( container, new StubLifetimeScopeProvider( container ) );
  18.  
  19. DependencyResolver.SetResolver( resolver );
  20. }

其它

Autofac.dll 版本 3.4.0.0
Autofac.Integration.Mvc.dll 版本 3.3.4.215

Autofac 的属性注入方式的更多相关文章

  1. Autofac 的属性注入,IOC的坑

    Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不 ...

  2. 基于autofac的属性注入

    基于autofac的属性注入 什么是属性注入 在了解属性注入之前,要先了解一下DI(Dependency Injection),即依赖注入.在ASP.NET Core里自带了一个IOC容器,而且程序支 ...

  3. Autofac 的构造函数注入方式

    介绍 该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入.注入方式通过构造函数. 在编写 aufofac 的依赖注入 ...

  4. ASP.NET Core中使用Autofac进行属性注入

    一些无关紧要的废话: 作为一名双修程序员(自封的),喜欢那种使用Spring的注解形式进行依赖注入或者Unity的特性形式进行依赖注入,当然,形式大同小异,但结果都是一样的,通过属性进行依赖注入. A ...

  5. TZ_11_Spring-Boot的属性注入方式(jdbc为例)

    1.以上一篇文档为基础 2.创建jdbc外部属性文件 application.properties此名字为默认文件名在使用是不需要使用 @Propertysource("classpath: ...

  6. spring的两种属性注入方式setter注入和构造器注入或者自动注入

    1.这里的属性自动注入,与注解配置bean是两回事.这里的自动注入,指的是bean属性的自动注入. bean属性自动注入,包括byNAme和ByType两码事. 2.所有的applicationCon ...

  7. spring属性注入方式

    一.使用有参构造注入属性 配置文件 constructor-arg标签是需注入属性的名字 User类 生成了User的有参构造函数 测试类 结果 打印出了name属性的值 二.使用set方法注入属性 ...

  8. .net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入

    本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果. 前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html 正文: Autof ...

  9. WebAPI2使用Autofac实现IOC属性注入完美解决方案

    一.前言 只要你是.NETer你一定IOC,IOC里面你也会一定知道Autofac,上次说了在MVC5实现属性注入,今天实现在WebApi2实现属性注入,顺便说一下autofac的程序集的注入方式,都 ...

随机推荐

  1. Python 主成分分析PCA

    主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性组合,这些线性组合最大化样本方差 ...

  2. Tuple方法

    组元是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.组元使用泛型来简化一个类的定义. public class Point { public int ...

  3. C# 导出到Excel

    一个DataGrid里有两张表的数据,导出成一张表 protected void btnExcel_Click(object sender, EventArgs e) { InfoExport(); ...

  4. 新冲刺Sprint3(第一天)

    一.Sprint介绍 sprint2已经结束了,现在准备进行新一轮的冲刺--sprint3.现在简单说下sprint3的情况,正在进行的有更新商品图片和浏览商家相关信息,还有就是APP测滑栏的完善.准 ...

  5. Sprint第二个冲刺(第十二天)

    一.Sprint 计划会议: 现在商家上传商品的图片的功能已经完成了,正在准备是实现更新商品图片.更新商品价格和商品描述得功能,目前工作进展顺利,进度也慢慢赶上,争取顺利完成目标. 下面是真机测试下的 ...

  6. linux和window下mkdir函数问题(转-锦曦月)

    通过WIN32宏进行判断   window下mkdir函数   #include<direct.h> int _mkdir( const char *dirname );   linux下 ...

  7. android之LayoutInflater讲解

    在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater-->用来获得布局文件对象的. LayouInflater经常在 ...

  8. RelativeLayout.LayoutParams.addRule()方法

    1.应用场景 在使用RelativeLayout布局的时候,通常在载入布局之前在相关的XML文件中进行静态设置即可.但是,在有些情况下,我们需要动态的设置布局 的属性,在不同条件下设置不同的布局排列方 ...

  9. Spring源码学习之:@async 方法上添加该注解实现异步调用的原理

    在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下 spring 是如何完成这个功能的.    spring 在扫描be ...

  10. spring技术核心概念纪要

    一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...