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 IUserRepository:IRepository<UserInfo>
{ }
public class UserRepository : IUserRepository
{
private static List<UserInfo> _users; public UserRepository()
{
_users = new List<UserInfo>();
} public void Add( UserInfo item )
{
_users.Add( item );
} public List<UserInfo> Find( Expression<Func<UserInfo, bool>> predicate = null )
{
if ( predicate == null ) return _users; return _users.Where( predicate.Compile() ).ToList();
} public void Modifty( UserInfo item )
{
var user = _users.Find( u => u.Id == item.Id ); if ( user == null ) return; user.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 IUserAppService:IAppService<UserInfo>
{ }
public class UserAppService : IUserAppService
{
private readonly IUserRepository _userRepository; public UserAppService(IUserRepository userRepository)
{
this._userRepository = userRepository;
} public void Add( UserInfo item )
{
this._userRepository.Add( item );
} public List<UserInfo> Find( Expression<Func<UserInfo, bool>> predicate = null )
{
return this._userRepository.Find( predicate );
} public void Modify( UserInfo item )
{
this._userRepository.Modifty( item );
}
}
public class HomeController : Controller
{
private IUserAppService _userAppService; public HomeController(IUserAppService userAppService)
{
this._userAppService = userAppService;
} public ActionResult Index()
{
ViewBag.Message = "Home-Index";
this._userAppService.Add( new UserInfo { Id = , Name = "JRoger" } );
ViewBag.Users = this._userAppService.Find(); return View("~/Views/Home/Index.cshtml");
}
}
构造函数注入代码
虽然以上代码没有注释,但觉得结构已经非常清楚了,不用再过多的解释。 但有一点需要注意一下,在 HomeController 类和 UserAppService 类的构造函数中都有传进来的实例对象(我已经用橘红色标记了)。这也是使用构造函数注入的其中一个关键点。
下面来看一下实现依赖注入的核心代码怎么调用:
private void _InitIoC()
{
var builder = new ContainerBuilder(); builder.RegisterControllers( typeof( MvcApplication ).Assembly ); 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(); var container = builder.Build();
var resolver = new AutofacDependencyResolver( container ); DependencyResolver.SetResolver( resolver );
}
其它:
Autofac.dll 版本 3.4.0.0
Autofac.Integration.Mvc.dll 版本 3.3.4.215
Autofac 的构造函数注入方式的更多相关文章
- Autofac 的属性注入方式
介绍 该篇文章通过一个简单的 ASP.NET MVC 项目进行介绍如何使用 autofac 及 autofac 的 MVC 模块进行依赖注入.注入方式通过构造函数.在编写 aufofac 的依赖注入代 ...
- .net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果. 前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html 正文: Autof ...
- Autofac之依赖注入
这里主要学习一下Autofac的依赖注入方式 默认构造函数注入 class A { public B _b; public A() { } public A(B b) { this._b = b; } ...
- MVC Autofac构造函数注入
建立 空的 MVC4项目 首先引用 NuGet 里 autofac 和 autofac .integration. mvc 然后 建立Model public class Person { publi ...
- Spring的三种注入方式(Setter、构造函数和自动注入)
一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...
- Autofac Getting Started(默认的构造函数注入)
https://autofaccn.readthedocs.io/en/latest/getting-started/index.html The basic pattern for integrat ...
- .net core番外第一篇:Autofac的几种常见注入方式、生命周期和AOP
使用Autofac进行服务注册实践: 新建三个项目,分别是webapi项目 Wesky.Core.Autofac以及两个类库项目 Wesky.Core.Interface和Wesky.Core.Ser ...
- NopCommerce使用Autofac实现依赖注入
NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...
- Asp.Net Mvc使用Autofac实现依赖注入
在asp.net mvc控制器中使用Autofac来解析依赖 如下Controller中使用构造函数依赖注入接口IPeople : public class AutoFacController : C ...
随机推荐
- PAT (Basic Level) Practise:1014. 福尔摩斯的约会
[题目链接] 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”.大侦探很快 ...
- PAT (Basic Level) Practise:1010. 一元多项式求导
[题目链接] 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- cornerstone忽略显示.DS_Store文件
在MacOS上使用svn工具时,经常发现变化列表里出现一堆的?文件,.DS_Store,对有强迫症的人来说很郁闷.处理起来很简单,就是在svn的配置里忽略这个文件.#ue ~/.subversion/ ...
- 【转载】AngularJs 指令directive之controller,link,compile
关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-controller.不过你可千万不要用 ng-前缀了,防止与系统自带的指令重名.另外一个需知道的 ...
- js计算日期之间的月份差
<script type="text/javascript"> getMonthBetween("2015-05-01","2016-05 ...
- NET异常 在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。
var Listener = new TcpListener(IPAddress.Any, port); Listener.AllowNatTraversal(true); // 在WIN8中调试没问 ...
- webform 创建树
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- linux 文档处理命令
1. 将用户信息数据库文件和组信息数据纵向合并为一个文件/1.txt(覆盖) 2.将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件/2.txt(追加 3.将/1.txt./2.txt两个文件 ...
- CORBA GIOP消息格式学习
想要深入理解ORB的工作过程与原理,学习与了解GIOP消息格式必不可少.我们知道GIOP是独立于具体通信的更高级别的抽象,因此这里针对GIOP在TCP/IP上的实现IIOP协议进行学习与分析(IIOP ...
- phonegap文件,目录操作以及网络上传,下载文件(含demo)
正在做一个跨平台的应用,需要使用phonegap进行文件的一些基本操作. 需求如下:可以选择本地图片,或者从相机选择图片,并进行显示在本地,然后上传到服务器,以及可以从服务器下载图片显示出来,如果本地 ...