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特性 標記與它匹配的接口;
![](http://static.javashuo.com/static/loading.gif)
在Conronl中,使用 Import 來給接口注入實現類的實例
![](http://static.javashuo.com/static/loading.gif)
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容器ui
//設置MEF依賴注入容器 DirectoryCatalog catalog = new DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath); MefDependencySolver solver = new MefDependencySolver(catalog); //MVC依賴注入 DependencyResolver.SetResolver(solver);
源碼:http://files.cnblogs.com/AntonWang/MEF%E5%BA%94%E7%94%A8%E4%BA%8EIOC.7zthis