首页 / 知识
关于mef:.NET的哪种托管扩展框架?
2023-04-14 02:43:00

Whither Managed Extensibility Framework for .NET?有没有人与微软的可管理扩展框架(MEF)合作过? Kinda听起来像是要尝试所有人的万物-它是外接程序管理器! 是鸭子打字! 我想知道是否有人对此有正面或负面的经验。 我们目前正计划在下一个大型项目中使用通用IoC实现ala MvcContrib。 我们应该把MEF混在一起吗? 我们不希望MEF成为通用IoC。考虑MEF的IoC方面的最佳方法是实现细节。我们将IoC用作模式,因为它是解决我们要解决的问题的好方法。 MEF专注于可扩展性。当您想到MEF时,将其视为推动我们平台发展的一项投资。我们未来的产品和平台将利用MEF作为增加可扩展性的标准机制。第三方产品和框架也将能够利用这种相同的机制。 MEF的普通"用户"将编写MEF将使用的组件,而不会在其应用程序中直接使用MEF。 想象一下,当您将来想要扩展我们的平台时,将dll放入bin文件夹中就可以了。启用了MEF的应用程序会随着新的扩展程序亮起。这就是MEF的愿景。 这篇文章引用了Managed Extensibility Framework Preview 2。 因此,我经历了MEF并撰写了一个快速的" Hello World",如下所示。我要说的是,完全容易理解和理解。目录系统很棒,可以很轻松地扩展MEF本身。将其指向加载项程序集的目录并让其处理其余部分很简单。 MEF的传统ala Prism确实可以证明这一点,但如果没有这样,我认为这很奇怪,因为这两个框架都是关于组合的。 我认为最困扰我的是_container.Compose()的"魔力"。如果查看HelloMEF类,您将看到greetings字段从未被任何代码初始化,这简直太可笑了。我想我更喜欢IoC容器的工作方式,即您明确要求容器为您构建对象。我不知道某种" Nothing"或" Empty"通用初始值设定项是否正确。即
至少要用"东西"填充对象,直到容器组成代码运行时才用真实的"东西"填充对象。我不知道-它有点Visual Basic的Empty或Nothing关键字,我一直不喜欢它。如果有人对此有任何想法,我想听听他们的看法。也许这只是我需要克服的问题。它标有一个很大的[Import]胖属性,因此并不像是一个完整的谜一样。 控制对象的生命周期并不明显,但是默认情况下,一切都是单例的,除非您向导出的类添加[CompositionOptions]属性。让我们指定Factory或Singleton。很高兴看到Pooled在某个时候被添加到该列表中。 我不清楚鸭子的打字功能如何工作。看起来更像是在对象创建时进行元数据注入,而不是鸭子输入。而且看起来您只能添加另外一只鸭子。但是就像我说的那样,我还不清楚这些功能如何工作。希望我可以稍后再填写。 我认为对影子复制由DirectoryPartCatalog加载的DLL是一个好主意。现在,一旦MEF持有DLL,它们就会被锁定。这也将允许您添加目录观察器并捕获更新的插件。那真是太好了... 最后,我担心插件DLL的信任程度以及MEF在部分信任环境中的行为方式或行为方式。我怀疑使用MEF的应用程序将需要完全信任。将加载项加载到自己的AppDomain中可能也是明智的。我知道它有点System.AddIn,但是它可以使用户插件和系统插件之间非常清晰地分开。 好的-足够的起泡。这是MEF和C#中的Hello World。请享用!
鸭子类型不会在V1中提供,尽管它在当前版本中。在将来的版本中,我们将用可插入的适配器机制代替它,在该机制下,用户可以使用鸭子类型的机制。我们之所以选择鸭子类型,是为了解决版本问题。使用Duck Typing,您可以删除出口商和进口商之间的共享引用,从而允许合同的多个版本同时存在。 关于安迪关于MEF加载的扩展的安全性问题(很抱歉,我还没有足够的要点:)),解决此问题的地方在目录中。 MEF目录是完全可插入的,因此您可以在加载之前编写一个自定义目录来验证程序集密钥等。如果需要,您甚至可以使用CAS。我们正在寻找可能提供的挂钩,以使您无需编写目录即可执行此操作。但是,当前目录的来源是免费提供的。我怀疑最低限度是有人(也许在我们的团队中)将实现一个并将其扔到CodePlex的扩展/贡献项目中。 Ayende在这里也有很好的文章:http://ayende.com/Blog/archive/2008/09/25/the-managed-extensibility-framework.aspx 安迪,我相信Glenn Block在MSDN MEF论坛的这个主题中回答了许多类似这样的人(自然)问题: CompositionContainer与传统IoC容器的比较。 在某种程度上,相对于MEF背后的主要意图(即可扩展性而不是组合性),上述Artem的答案是正确的。如果您主要对合成感兴趣,请使用其他常见的IoC嫌疑人之一。另一方面,如果您主要关注可扩展性,那么目录,零件,元数据标记,鸭子类型和延迟加载的介绍都会带来一些有趣的可能性。同样,Krzysztof Cwalina在这里解释了MEF和System.Addins如何相互关联。 我要说的是,由于它将与.NET 4.0 Framework中的"系统"名称空间挂在一起,所以您不会做错太多。看看MEF如何演变以及汉密尔顿·韦里斯西莫(城堡)对MEF的方向产生什么影响将是很有趣的。 如果它像鸭子一样嘎嘎叫,它可能只是当前IoC容器群的一部分... 这不是控制容器的注入。它是插件支持框架。 这篇文章和评论中对此有更详细的讨论 http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.html |
最新内容
相关内容
linux中扩展命令缩写?
linux中扩展命令缩写?,网络,命令,信息,工作,管理,暂停,基础,公司,半导体,时间,许多Linux命令后面会有ctl,例如journalctl,systemctl,apachectllinux怎么改扩展命令?
linux怎么改扩展命令?,网络,密码,情况,软件,通用,地址,中心,环境,分区,根目录,linux下如何设置扩展网卡的优先级1、从桌面右下角,网络里面进入,linux基本命令框架?
linux基本命令框架?,系统,基础,网络,设备,管理,基础知识,环境,管理系统,概念,技术,新手如何自学linux安装linux系统,把自己喜欢的linux发行版安linux扩展逻辑卷命令?
linux扩展逻辑卷命令?,管理,系统,环境,信息,工作,位置,时间,网络,平均,基础,Linux系统下怎么创建和管理逻辑卷?LVM 是 Logical Volume Manager靠谱的Python爬虫框架都有哪几个?
靠谱的Python爬虫框架都有哪几个?,官网,培训,爬虫,专文,框架,统计数据,辅助工具,网页,程序,以下内容,一些同学普遍认为仅剩Python才能够顺利实python好用的VS Code扩展有哪些?
python好用的VS Code扩展有哪些?,代码,工具,数据,培训,环境,注释,分支,函数,片段,文本,在Python学习过程中,好用的设置对我们的开发效率是有很Python图形应用GUI开发框架
Python图形应用GUI开发框架,平台,代码,工具,做好,成都,行业,第三,图片,设备,数据,作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发十个Python Web应用开发框架
十个Python Web应用开发框架,系统,工具,项目,设计,技术,支柱,软件,网站,信息,标准,python是一门动态、面向对象语言。其最初就是作为一门面向python的单元测试框架
python的单元测试框架,代码,生态,信息,标准,测试,分析,工具,环境,条款,活跃,1、AutotestAutotest是Google、Redhat、IBM公司联合开发的分布式python 的异步框架模型
python 的异步框架模型,暂停,流程,状态,地方,概念,培训,时间,任务,队列,框架,python提供了asyncio模块来支持异步编程,其中涉及到coroutines、优秀的GUI Python框架
优秀的GUI Python框架,平台,代码,网站,包装,设备,系统,项目,软件,技术,工具,由于Python越来越受欢迎,并得到广泛采用,它将成为2020年流行起来的使用Cython为Python编写更快的C扩
使用Cython为Python编写更快的C扩展,代码,时间,意外,工作,指数,培训,系统,整数,噪声,算法,使用Python很有趣,但有时,用它编写的程序可能很慢。