关于微软MEF实现IOC 在WebAPI中使用问题

问题描述

一直在使用MEF做解耦,在项目中用的一直都是好的,包括在asp.netmvc4中也没问题,今天专门建立WebApi进行测试,发现同样在Controller中能使用的在apiController中倒入时对象一直都是null.引入MEF的文件如下:publicclassMefDependencySolver:IDependencyResolver{privatereadonlyComposablePartCatalog_catalog;privateconststringMefContainerKey="MefContainerKey";publicMefDependencySolver(ComposablePartCatalogcatalog){_catalog=catalog;}publicCompositionContainerContainer{get{if(!HttpContext.Current.Items.Contains(MefContainerKey)){HttpContext.Current.Items.Add(MefContainerKey,newCompositionContainer(_catalog));}CompositionContainercontainer=(CompositionContainer)HttpContext.Current.Items[MefContainerKey];HttpContext.Current.Application["Container"]=container;returncontainer;}}#regionIDependencyResolverMemberspublicobjectGetService(TypeserviceType){stringcontractName=AttributedModelServices.GetContractName(serviceType);returnContainer.GetExportedValueOrDefault<object>(contractName);}publicIEnumerable<object>GetServices(TypeserviceType){returnContainer.GetExportedValues<object>(serviceType.FullName);}#endregion我一直怀疑Controller与apiController处理上不一样,MEF不识别。或者需要在上面代码里加扩展?请教各位大侠!

解决方案

解决方案二:
请问这个问题解决了吗?如何解决的。
解决方案三:
IOC用Microsoft.Practices.Unity,这个很不错,网上很多资源的哈
解决方案四:
楼主这个问题解决了没有?俺也遇到了。。。
解决方案五:
我之前是用Autofac在webapi框架下也不可以实现注入要添加Autofac的webapidll才可以不知道你的是否也需要添加特殊的dll
解决方案六:
请问这个问题解决了吗?
解决方案七:
Global.cs中加入://installwebapimefSystem.Web.Http.GlobalConfiguration.Configuration.DependencyResolver=solver;

就可以了

时间: 2024-09-19 21:16:22

关于微软MEF实现IOC 在WebAPI中使用问题的相关文章

关于webapi中entityframework资源释放的问题

问题描述 关于webapi中entityframework资源释放的问题 由于要用到EF的延迟加载,所以不能在调用结束后立刻释放上下文.之前webform的做法是在页面OnUnload时释放.webapi中似乎没有合适的地方来释放,filter的OnActionExecuted事件也是在序列化返回数据之前,有没有什么事件可以在序列化之后调用的?这样就能很好的释放EF资源了 解决方案 不要随便using或Dispose DbContexthttp://blog.csdn.net/wanmdb/ar

webapi中,接收post传入参数不正确的问题

问题描述 webapi中,接收post传入参数不正确的问题 请求代码: $.post("/api/facstate/delete", { id: selectRow.ID }, ajaxResultHandler); 后台代码: public JsonRes Delete([FromBody]int id) { var count = bll.DelBy(p => p.ID == id); if (count == 1) return new JsonRes("succ

webapi中取文件的物理路径(server.mappath)

在Webapi中是用不了server.mappath方法的,上网搜索了一下,发现是用如下代码取得文件绝对路径:    string logpath = System.Web.Hosting.HostingEnvironment.MapPath($"/Log/{DateTime.Now.ToString("yyyyMMdd")}.txt");

asp.net mvc中使用MEF(IOC容器的问)

问题描述 报的异常:System.Reflection.ReflectionTypeLoadException"类型的异常在mscorlib.dll中发生,但未在用户代码中进行处理其他信息:无法加载一个或多个请求的类型.有关更多信息,请检索LoaderExceptions属性.GetService这里不知道怎么传过来是控制器的工厂方法{Name="IControllerFactory"FullName="System.Web.Mvc.IControllerFacto

微软梁念坚:明年中国会成全球最大PC市场

3月19日早间消息,据台湾媒体报道,微软大中华区董事长兼CEO梁念坚昨(18)日表示,台湾是PC供应链集结重镇,对需求复苏的感受最明显,并预计明年中国会取代美国,成全球最大PC市场. 梁念坚在2008年底从摩托罗拉转战微软,成为微软大中华区最高主管后,昨天第一次与台湾媒体直接 对话. 梁念坚说,刚到微软就碰上金融海啸,虽然大中华区是全球受冲击最小的地区,但难免业绩下滑,他面对不小的压力,直到近半年多来才明显感受到景气回升. 他认为,台湾是PC供应链集结重镇,对景气感受最敏感,这波复苏中,台湾微软

微软对摩托罗拉的专利诉讼中增加谷歌为被告

[科技讯]10月12日消息,据国外媒体报道,微软日前在德国慕尼黑地方法庭宣布,将在针对摩托罗拉移动公司的专利诉讼中增加谷歌为被告. 据报道,微软指控摩托罗拉移动侵犯了其一项关于"认证本地资源及其方法的电脑系统"的专利.微软称这项专利被应用到谷歌地图的Android版应用程序中. 知情人士透漏,摩托罗拉移动在听证会上"固执的"拒绝了微软提出的要求(关于公布该专利如何在谷歌设备上运行).在听证会将要结束时,微软律师宣布将修改诉讼对象,将摩托罗拉移动的东家谷歌公司以及谷歌

微软将在新版Edge浏览器中支持广告拦截器

3月31日消息,据路透社报道,微软周四表示,公司正在考虑让下一版本的Edge浏览器实现通过第三方拓展件支持广告过滤功能. 科技网站ZDNet今天早些时候根据一张拍摄自微软开发者大会的产品蓝图指出,该公司将会在下一版本的Edge浏览器中提供广告拦截器. 不过微软方面随后作出澄清,称广告拦截器并非为自己开发,而是通过第三方和Edge的拓展件功能实现. 微软在Windows 10操作系统上用Microsoft Edge取代了Internet Explorer作为系统默认浏览器. 更快的页面加载速度.更

微软:在新的竞争中塑造新的企业文化

和过去两年的表现不同,萨提亚.纳德拉今年并没有向微软员工发布"状态陈述"的备忘录. 我猜测这意味着纳德拉的计划是继续推动微软重塑生产力,"让这个星球上的每个人和每个机构都能够取得更多成就",而没有任何之前未公布的.大规模的裁员计划,至少暂时如此. 纳德拉已经完成了一个关键使命,改变微软内部的文化,他还加强了微软在慈善以及为了公益使用技术方面的公众关注度. 但是还有另一个与此一脉相承的相关主题.在上周的微软全球合作伙伴大会(WPC)上,微软两位公众人物:杰出工程师Ja

微软公司在Web服务器领域中蚕食了Apache-Linux平台的很大一块儿市场

英国的Netcraft公司称,微软在Web服务器市场上的份额提高了4.7%,Apache-Linux平台的份额下跌了5.9%.微软市场份额提高的主要原因是域名注册商Go Daddy将350万域名由Linux平台移植到了Windows平台上. 据Netcraft称,4月份,Apache仍然以63%的市场份额在Web服务器市场上占有绝对领先优势.微软则以25%的市场份额远远落在了后面. 传统上,注册商中的技术趋势对Web服务器市场有很大影响.Netcraft表示,微软最近一次Web服务器市场份额的大