前言:前段时间一直在研究依赖注入,不过不是在MVC框架中使用,今天突然想到在MVC中使用Unity实现依赖注入,一时慌了,不知道从何下手,接着就是网上不停的找资料,下面我把我找到的资料分享下,也把我的想法说下,如果大神们有什么更好的实现方式,请多多指教啊。
什么是Unity?
Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入。Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题。构建一个成功应用程序的关键是实现非常松散的耦合设计。松散耦合的应用程序更灵活,更易于维护。这样的程序也更容易在开发期间进行测试。你可以模拟对象,具有较强的具体依赖关系的垫片(轻量级模拟实现),如数据库连接,网络连接,ERP连接,和丰富的用户界面组件。例如,处理客户信息的对象可能依赖于其他对象访问的数据存储,验证信息,并检查该用户是否被授权执行更新。依赖注入技术,可确保客户类正确实例化和填充所有这些对象,尤其是在依赖可能是抽象的 。
如何获取Unity?
你可以下载一个Nuget安装,通过Nuget获取。
MVC中如何使用Unity?
在MVC中使用Unity需要实现两个接口:IDependencyResolver和IControllerActivator.
1、需要实现IDependencyResolver接口的GetServices和GetService,分别是注册单个会这多个注册服务。IDependencyResolver接口的实现应该委托给底层的依赖注入容器提供注册服务请求的类型。当有没有注册的服务请求的类型,ASP.NET MVC框架预计这个接口的实现返回GetService为空,并从GetServices返回空集合。
下图展示IDependencyResolver接口的实现:
实现这两个方法,是为了返回我们需要的Service或者object.
ASP.NET MVC 3已经推出了一个新的接口IControllerActivator,让您激活自定义的行为控制器,并且可以使用依赖注入。创建一个派生自IControllerActivator 接口的一个自定义的控制器。
做好这两个类之后,早Global.cs里面配置一下。
接着在Application_Start里面写入
具体的丝路是:首先通过GetUnityContainer方法获取container,并通过SetResolver来获取自己的container实例。
在Controller只要添加一个[Dependency]特性,就会实现注入。