Autofac 的属性注入方式
介绍
该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入。注入方式通过构造函数。在编写 aufofac 的依赖注入代码之前先准备一些基础类。
基础类
- public class UserInfo
- {
- public int Id { get; set; }
- public string Name { get; set; }
- }
- public interface IRepository<T>
- {
- void Add( T item );
- void Modifty( T item );
- List<T> Find( Expression<Func<T, bool>> predicate = null );
- }
- public interface IProductRepository:IRepository<ProductInfo>
- {
- }
- public class ProductRepository : IProductRepository
- {
- private static List<ProductInfo> _products = new List<ProductInfo>();
- public void Add( ProductInfo item )
- {
- _products.Add( item );
- }
- public List<ProductInfo> Find( Expression<Func<ProductInfo, bool>> predicate = null )
- {
- if ( predicate == null ) return _products;
- return _products.Where( predicate.Compile() ).ToList();
- }
- public void Modifty( ProductInfo item )
- {
- var product = _products.Find( u => u.Id == item.Id );
- if ( product == null ) return;
- product.Name = item.Name;
- }
- }
- public interface IAppService<T>
- {
- void Add( T item );
- void Modify( T item );
- List<T> Find( Expression<Func<T, bool>> predicate = null );
- }
- public interface IProductAppService:IAppService<ProductInfo>
- {
- }
- public class ProductAppService : IProductAppService
- {
- public IProductRepository ProductRepository { get; set; }
- public void Add( ProductInfo item )
- {
- this.ProductRepository.Add( item );
- }
- public List<ProductInfo> Find( Expression<Func<ProductInfo, bool>> predicate = null )
- {
- return this.ProductRepository.Find( predicate );
- }
- public void Modify( ProductInfo item )
- {
- this.ProductRepository.Modifty( item );
- }
- }
- public class ProductController : Controller
- {
- public IProductAppService ProductService { get; set; }
- public ActionResult Index()
- {
- this.ProductService.Add( new ProductInfo { Id = , Name = "Lumia" } );
- return View("~/Views/Product/Index.cshtml");
- }
- }
属性注入代码
以下代码中 PropertiesAutowired() 方法就是实现了属性注入的核心,从单词字面意思就可以看出其用意。
- private void _InitIoC()
- {
- var builder = new ContainerBuilder();
- builder.RegisterControllers( typeof( MvcApplication ).Assembly )
- .PropertiesAutowired();
- builder.RegisterAssemblyTypes( typeof( MvcApplication ).Assembly )
- .Where( t => (t.Name.EndsWith( "Repository" ) || t.Name.EndsWith("AppService")) && !t.IsAbstract )
- //.InstancePerDependency() //每次都创建一个对象
- //.SingleInstance() //每次都是同一个对象
- //.InstancePerLifetimeScope() //同一个生命周期生成的对象是同一个
- .InstancePerRequest() //单个 Web / HTTP / API 请求的范围内的组件的共享一个实例。仅可用于支持每个请求的依赖关系的整合(如MVC,Web API,Web Forms等)。
- .AsImplementedInterfaces()
- .PropertiesAutowired();
- var container = builder.Build();
- var resolver = new AutofacDependencyResolver( container, new StubLifetimeScopeProvider( container ) );
- DependencyResolver.SetResolver( resolver );
- }
其它
Autofac.dll 版本 3.4.0.0
Autofac.Integration.Mvc.dll 版本 3.3.4.215
Autofac 的属性注入方式的更多相关文章
- Autofac 的属性注入,IOC的坑
Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不 ...
- 基于autofac的属性注入
基于autofac的属性注入 什么是属性注入 在了解属性注入之前,要先了解一下DI(Dependency Injection),即依赖注入.在ASP.NET Core里自带了一个IOC容器,而且程序支 ...
- Autofac 的构造函数注入方式
介绍 该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入.注入方式通过构造函数. 在编写 aufofac 的依赖注入 ...
- ASP.NET Core中使用Autofac进行属性注入
一些无关紧要的废话: 作为一名双修程序员(自封的),喜欢那种使用Spring的注解形式进行依赖注入或者Unity的特性形式进行依赖注入,当然,形式大同小异,但结果都是一样的,通过属性进行依赖注入. A ...
- TZ_11_Spring-Boot的属性注入方式(jdbc为例)
1.以上一篇文档为基础 2.创建jdbc外部属性文件 application.properties此名字为默认文件名在使用是不需要使用 @Propertysource("classpath: ...
- spring的两种属性注入方式setter注入和构造器注入或者自动注入
1.这里的属性自动注入,与注解配置bean是两回事.这里的自动注入,指的是bean属性的自动注入. bean属性自动注入,包括byNAme和ByType两码事. 2.所有的applicationCon ...
- spring属性注入方式
一.使用有参构造注入属性 配置文件 constructor-arg标签是需注入属性的名字 User类 生成了User的有参构造函数 测试类 结果 打印出了name属性的值 二.使用set方法注入属性 ...
- .net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果. 前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html 正文: Autof ...
- WebAPI2使用Autofac实现IOC属性注入完美解决方案
一.前言 只要你是.NETer你一定IOC,IOC里面你也会一定知道Autofac,上次说了在MVC5实现属性注入,今天实现在WebApi2实现属性注入,顺便说一下autofac的程序集的注入方式,都 ...
随机推荐
- Python 主成分分析PCA
主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性组合,这些线性组合最大化样本方差 ...
- Tuple方法
组元是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.组元使用泛型来简化一个类的定义. public class Point { public int ...
- C# 导出到Excel
一个DataGrid里有两张表的数据,导出成一张表 protected void btnExcel_Click(object sender, EventArgs e) { InfoExport(); ...
- 新冲刺Sprint3(第一天)
一.Sprint介绍 sprint2已经结束了,现在准备进行新一轮的冲刺--sprint3.现在简单说下sprint3的情况,正在进行的有更新商品图片和浏览商家相关信息,还有就是APP测滑栏的完善.准 ...
- Sprint第二个冲刺(第十二天)
一.Sprint 计划会议: 现在商家上传商品的图片的功能已经完成了,正在准备是实现更新商品图片.更新商品价格和商品描述得功能,目前工作进展顺利,进度也慢慢赶上,争取顺利完成目标. 下面是真机测试下的 ...
- linux和window下mkdir函数问题(转-锦曦月)
通过WIN32宏进行判断 window下mkdir函数 #include<direct.h> int _mkdir( const char *dirname ); linux下 ...
- android之LayoutInflater讲解
在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater-->用来获得布局文件对象的. LayouInflater经常在 ...
- RelativeLayout.LayoutParams.addRule()方法
1.应用场景 在使用RelativeLayout布局的时候,通常在载入布局之前在相关的XML文件中进行静态设置即可.但是,在有些情况下,我们需要动态的设置布局 的属性,在不同条件下设置不同的布局排列方 ...
- Spring源码学习之:@async 方法上添加该注解实现异步调用的原理
在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下 spring 是如何完成这个功能的. spring 在扫描be ...
- spring技术核心概念纪要
一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...