在 mvc 4 中使用 unity 进行依赖注入
在 mvc 4 中使用 unity 进行依赖注入
关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入。具体步骤如下: 1. 首先建立 一个 mvc 项目, 选择 basic

创建好后,完整的项目应该是这样的:

2. 创建 Home控制器, 并添加 index 视图
3.创建 UserInfo 类, 和 Iuser 接口以及 UserService类,UserService 实现Iuser 接口中 的方法, 其中的业务逻辑自己可以根据具体的情况来实现
4.打开 Nuget 程序管理包, 在搜索框中输入 unity ,并下载安装,具体如下图:

5. 创建一个 依赖解析容器,并实现接口IDependencyResolver 中两个重要的方法 object GetService(Type serviceType) IEnumerable<object> GetServices(Type serviceType) 这两个方法就是返回所依赖的服务的对象
/// <summary>
/// Dependency Injection Resolver Container
/// </summary>
public class UnityResolver : IDependencyResolver
{
protected IUnityContainer container; public UnityResolver(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
this.container = container;
} public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
} public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
} }
6. 在 app_start 中添加一个 unityConfig 配置文件
在这个文件中声明一个静态的没有返回值的方法,RegisterComponents,实例化一个解析容器 (也是刚才所添加的解析容器),然后将所依赖的接口和实现类在这里进行注册。 container.RegisterType<IUserInfo, UserInfoService>( new HierarchicalLifetimeManager()); 最后调用 DependencyResolver对象的 SetResolver方法 来保存刚才的注册。
public static void RegisterComponents()
{
var container = new UnityContainer(); // register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>(); container.RegisterType<IUserInfo, UserInfoService>( new HierarchicalLifetimeManager()); DependencyResolver.SetResolver(new UnityResolver(container)); }
7. 在 global.cs 中注册 UnityConfig 配置文件
UnityConfig.RegisterComponents();
8. 在Home 控制器中使用构造函数注入
IUserInfo userinfoService;
public HomeController( IUserInfo userinfoService)
{
// 依赖注入
this.userinfoService = userinfoService;
}
重新生成一下项目,如果没有错误,启动运行,我们将会看到样的界面:

源码下载: 下载源码
在 mvc 4 中使用 unity 进行依赖注入的更多相关文章
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...
- IOC使用Unity 实现依赖注入
转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- .NET 使用unity实现依赖注入
原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...
- 运用Unity实现依赖注入[结合简单三层实例]
运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...
- 我在项目中运用 IOC(依赖注入)--实战篇
上一篇<我在项目中运用 IOC(依赖注入)--入门篇>只是简单的使用 IOC.实际项目使用 IOC 的情景复杂多了,比如说,构造函数有多个参数,有多个类继承同一个接口... Unity都有 ...
- 使用Unity创建依赖注入
这篇文章翻译自<Dependency Injection With Unity>第三章.文中提到的类似"前几节"的内容您不必在意,相信您可以看懂的. P.S:如 ...
- 运用Unity实现依赖注入[有参构造注入]
上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合 ...
随机推荐
- 前端开发 —— google chart 的使用
1. 引入所需的 js 库 在 <head></head>中 <script src="https://ajax.googleapis.com/ajax/lib ...
- 转载:二次指数平滑法求预测值的Java代码
原文地址: http://blog.csdn.net/qustmeng/article/details/52186378?locationNum=4&fps=1 import java.uti ...
- SMON进程、PMON进程、LGWR/ARCH
SMON 进程:system monitor instance monitor 系统监控.实例监控进程 说明及作用:在实例关闭时,会清理临时段,整理空闲空间free space; 实例非正常关闭后,启 ...
- ORA-10922 Temporary tablespace group is empty错误
错误--练习查询,发现报错: SQL> select * from range_list_part_tab where id=100000Execution Plan------------- ...
- 学会从后往前遍历,例 [LeetCode] Pascal's Triangle II,剑指Offer 题4
当我们需要改变数组的值时,如果从前往后遍历,有时会带来很多麻烦,比如需要插入值,导致数组平移,或者新的值覆盖了旧有的值,但旧有的值依然需要被使用.这种情况下,有时仅仅改变一下数组的遍历方向,就会避免这 ...
- hdu1257 dp(最长上升子序列)
题意:有一种拦截系统,可以打击导弹,但是打击的高度会逐渐下降,因此为了防御导弹攻击,就必须用多个系统,现给出一列导弹依次的高度,求最少需要的系统数. 这道题是最长上升子序列问题,但是我一开始其实并没有 ...
- dbt 基本试用
dbt 是一个很不错的进行etl 中的t 处理的工具,灵活简单,我们需要写的就是select 语句 dbt 帮助我们进行处理 测试集成了graphql 以及使用docker 运行 安装 pip ins ...
- oracle 获取星期日期
oracle 中的计算如下: 计算本星期的起始结束日期--得到星期一的日期select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual ...
- P·C·L 了解
因为PCL是开源的,所以无论是商用还是研究都是免费的: 赞助商有Open Perception, Willow Garage, NVIDIA, Google, Toyota, Trimble, Urb ...
- C#常用插件和工具
Code generation(代码自动生成) NVelocity CodeSmith X-Code .NET XGoF - NMatrix / DEVerest Compilation(编译工具) ...