我希望通过直接引用插件项目并实例化插件类来测试插件的核心类.当我创建一个测试Console App项目并向插件项目添加项目引用时,我会在References列表中的引用旁边看到一个警告图标(带有感叹号的黄色三角形).
当我改为添加对dll的引用时,插件的程序集构建输出,我没有得到这样的警告.这个警告可以告诉我什么?
托管可扩展性框架(MEF)和托管AddIn框架(MAF,又名System.AddIn)似乎完成了非常类似的任务.根据这个Stack Overflow问题,MEF是System.Addin的替代品吗?,你甚至可以同时使用两者.
你什么时候选择使用一个与另一个?在什么情况下你会选择同时使用它们?
我正在尝试使用Orchard CMS等可插拔架构构建MVC4/MVC5应用程序.所以我有一个MVC应用程序,它将是启动项目并负责身份验证,导航等.然后将有多个模块单独构建为asp.net类库或剥离mvc项目并具有控制器,视图,数据存储库等.
我花了一整天的时间浏览网页上的教程并下载样本等,发现Kenny有最好的例子 - http://kennytordeur.blogspot.in/2012/08/mef-in-aspnet-mvc-4-and -webapi.html
如果我添加对这些DLL的引用,我可以从模块(单独的DLL)导入控制器.但使用MEF背后的原因是能够在运行时添加模块.我希望将DLL和视图复制到启动项目中的〜/ Modules //目录(我已经设法做到了这一点),MEF只是选择它们.努力让MEF加载这些库.
还有MefContrib,如本答案中所解释的ASP.NET MVC 4.0控制器和MEF,如何将这两者结合在一起?这是我即将尝试的下一件事.但我很惊讶MEF没有与MVC一起开箱即用.
有没有人有类似的架构工作(有或没有MefContrib)?最初我甚至想过剥离Orchard CMS并将其用作框架,但它太复杂了.也很高兴在MVC5中开发应用程序以利用WebAPI2.
看看Microsoft的Managed Extensibility Framework(MEF)和各种IoC容器(例如Unity),我没有看到何时使用一种类型的解决方案而不是另一种.更具体地说,似乎MEF处理大多数IoC类型模式,并且像Unity那样的IoC容器不是必需的.
理想情况下,我希望看到一个很好的用例,其中将使用IoC容器代替MEF或者除了MEF之外.
我和Glenn Block观看了DNR电视节目,看起来MEF对我的公司很有用.我试图找到有关它的优点和缺点的更多信息以及一些使用它的示例项目.有没有关于使用MEF的好博客/教程?
注意:我使用C#,所以如果示例是在C#中,那将是非常棒的.
我正在寻找一种从.NET应用程序访问插件的简单而安全的方法.虽然我认为这是一个非常普遍的要求,但我很难找到满足我所有需求的东西:
我已经调查了MEF和MAF,但我很难看到如何使它们中的任何一个符合要求.
假设我的理解是正确的,MAF无法支持在其隔离边界上传递泛型类型,这对我的应用程序至关重要.(MAF实现起来也非常复杂,但如果我能解决泛型问题,我会准备好使用它).
MEF几乎是一个完美的解决方案,但似乎无法满足安全性要求,因为它将扩展程序集加载到与主机相同的AppDomain中,因此显然可以防止沙箱化.
我已经看到了这个问题,它讨论了在沙盒模式下运行MEF,但没有描述如何.这篇文章指出"当使用MEF时,你必须信任扩展不运行恶意代码,或通过代码访问安全提供保护",但同样,它没有描述如何.最后,有这篇文章描述了如何防止未知插件被加载,但这不适合我的情况,因为即使是合法的插件也是未知的.
我已经成功地将.NET 4.0安全属性应用于我的程序集,并且MEF正确地尊重它们,但是我没有看到这有助于我锁定恶意代码,因为许多可能是安全威胁的框架方法(例如,方法System.IO.File)标记为SecuritySafeCritical,这意味着它们可以从SecurityTransparent程序集访问.我在这里错过了什么吗?是否有一些额外的步骤我可以告诉MEF它应该为插件程序集提供互联网权限?
最后,我也看了创造我自己的简单的沙盒插件架构,使用单独的AppDomain,描述在这里.但是,据我所知,这种技术只允许我使用后期绑定来调用不受信任的程序集中的类上的静态方法.当我尝试扩展这种方法来创建我的一个插件类的实例时,返回的实例无法转换为公共插件接口,这意味着主机应用程序无法调用它.是否有一些技术可用于跨AppDomain边界获得强类型代理访问?
我为这个问题的长度道歉; 原因是要显示我已经调查过的所有途径,希望有人可以提出新的尝试.
蒂姆,非常感谢你的想法
MEF(Managed Extensibility Framework)解决了哪些问题,而现有的IoC/DI容器无法解决这些问题?
我刚开始学习DI(我正在研究WPF/Silverlight,但我有计划转向ASP.NET).在我从互联网上阅读了一些DI文章之后,有两个我感兴趣的框架,MEF和Unity.我想知道它们之间的真实世界有什么不同,哪一个是好的.
我最近在整个应用程序中开始使用Lazy,我想知道在使用时是否有任何明显的消极方面需要考虑Lazy<T>?
我试图Lazy<T>尽可能经常使用,主要是为了帮助减少加载但非活动插件的内存占用.
我一直在搜索依赖注入并阅读一些文章.但我仍然无法找出MEF和其他IoC之间的区别.所以,我的问题是:在哪种情况下,我更喜欢使用MEF还是IoC容器?
为什么在PRRE(WPF和Silverlight)或桌面应用程序中使用MEF是好的?
而在Web应用程序中,人们使用IoC容器.
那么,决定使用哪种依赖技术的标准是什么?
我浏览过文章http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx ,但我无法确定任何事情.
structuremap dependency-injection mef ioc-container inversion-of-control
mef ×10
.net ×6
c# ×3
maf ×2
add-in ×1
asp.net ×1
asp.net-mvc ×1
sandbox ×1
structuremap ×1
system.addin ×1