发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
IOC,控制反转的意思。所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。所谓反转,你必须理解如果不反转,会怎么着,因为A必须要有B,才可以调用B,如果不反转,意思就是A主动获取B的实例:B b = new B(),这是获取获取B实例的方法,然后你就可以调用b对象了。 所以,不反转,意味着A要主动获取B,才能使用B;到了这里,你就应该明白了反转的意思了。倒置就是A要调用B的话,A并不需要主动获取B,而是由其它人自动将B送上门来。.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuilder,StructureMap,Spring.Net等,这些第三方工具各不相同,但功能大体都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动或手动来通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。
在逻辑层中,使用 Export特性 标记与它匹配的接口;
在Conronl中,使用 Import 来给接口注入实现类的实例
1.MefDependencySolver实现代码如下:
/// <summary> /// MEF依赖关系解析类 /// </summary> public class MefDependencySolver : System.Web.Mvc.IDependencyResolver, System.Web.Http.Dependencies.IDependencyResolver { private readonly ComposablePartCatalog _catalog; private const string MefContainerKey = "MefContainerKey"; public MefDependencySolver(ComposablePartCatalog catalog) { _catalog = catalog; } public IDependencyScope BeginScope() { return this; } public void Dispose() { } public CompositionContainer Container { get { if (!HttpContext.Current.Items.Contains(MefContainerKey)) { HttpContext.Current.Items.Add(MefContainerKey, new CompositionContainer(_catalog)); } CompositionContainer container = (CompositionContainer)HttpContext.Current.Items[MefContainerKey]; HttpContext.Current.Application["Container"] = container; return container; } } #region IDependencyResolver Members public object GetService(Type serviceType) { string contractName = AttributedModelServices.GetContractName(serviceType); return Container.GetExportedValueOrDefault<object>(contractName); } public IEnumerable<object> GetServices(Type serviceType) { return Container.GetExportedValues<object>(serviceType.FullName); } #endregion }
2.Global中初始化MEF容器
//设置MEF依赖注入容器
DirectoryCatalog catalog =
new
DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath);
MefDependencySolver solver =
<span style=
"font-size: 14px; text-decoration: underline;"
><strong>MefDependencySolver</strong></span>(catalog);
//MVC依赖注入
DependencyResolver.SetResolver(solver);<span style=
"line-height: 1.5; font-size: 14px;"
><a style=
"line-height: 1.5; font-size: 2em;"
title=
"http:///Q4QyvHMHtf3MW"
href=
"http://www.cnblogs.com/AntonWang/admin/IOC组件注册"
> </a></span>
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
插件式架构设计实践一:插件式系统架构设计简介 - 努力并不一定成功,但放弃却一定会失败! ...
插件式架构设计实践一:插件式系统架构设计简介 - 努力并不一定成功,但放弃却一定会失败! ...本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF...
spring中的AOP与IOC
没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健壮的。(1)Spring实现了AOP联盟接口。EJB开发者都知道,EJB组件能够使用J2EE容器提供的声明式服务,但是这些服务要借助于EJB...
ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)
ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)So: Asp.net MVC、EF、IOC容器、EasyUI、分层分模块、基于接口。EasyUI 1.5:对于应用系统,...
Spring IOC三种注入方式比较
Spring IOC三种注入方式比较IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理。<1> 接口注入 (Type1) CODE:public class ClassA {private Interfac...
最常见面试题(SSH方面
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象) 要记住:Spring是一个容器,凡是在容...
控制反转与依赖注入模式
控制反转与依赖注入模式控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给外部容器,通过容器来...
Spring源码解析IOC过程详解
Spring源码解析IOC过程详解。从Spring3.0开始,FactoryBean开始支持泛型,即接口声明改为FactoryBean的形式以Bean结尾,表示它是一个Bea...
Java开发中SSM框架整合开发之 Spring IoC
Java开发中SSM框架整合开发之 Spring IoC.从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注...
Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception
Microsoft Enterprise Library 5.0 系列教程(八) Unity Dependency Injection and Interception依赖注入容器Unity://3.向容器中注册ILog...
微信扫码,在手机上查看选中内容