首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何确定我们应该选择哪一个使用MEF与任何IoC?

在选择使用MEF(Managed Extensibility Framework)与任何IoC(Inversion of Control)之间,我们需要考虑以下几个因素:

  1. 功能需求:首先,我们需要明确我们的功能需求。MEF是一个用于构建可扩展应用程序的框架,它提供了插件式架构和组件的自动发现和加载。它适用于需要动态加载和管理组件的场景。而IoC容器则是一种用于管理对象依赖关系的机制,它可以帮助我们实现松耦合和可测试性。如果我们的主要需求是实现组件的动态加载和管理,那么MEF可能是一个更好的选择。如果我们更关注对象依赖关系的管理和控制,那么IoC容器可能更适合。
  2. 技术栈和开发环境:我们还需要考虑我们的技术栈和开发环境。MEF是.NET Framework的一部分,它与.NET应用程序集成得非常紧密。如果我们的应用程序是基于.NET开发的,那么使用MEF可能更加方便和无缝。而IoC容器则是一种通用的设计模式,可以在各种编程语言和开发环境中使用。如果我们的应用程序是跨平台的或使用其他编程语言开发的,那么IoC容器可能是一个更好的选择。
  3. 社区支持和生态系统:我们还需要考虑MEF和IoC容器的社区支持和生态系统。MEF是一个由微软提供的框架,拥有广泛的社区支持和丰富的生态系统。它有大量的文档、教程和示例代码可供参考。而IoC容器有多种实现,如Unity、Autofac、Ninject等,它们都有自己的社区和生态系统。我们可以根据自己的需求和偏好选择一个有活跃社区和丰富资源的IoC容器。

综上所述,选择使用MEF与任何IoC取决于我们的功能需求、技术栈和开发环境,以及社区支持和生态系统。根据具体情况,我们可以权衡利弊并选择最适合我们项目的方案。

(注:腾讯云相关产品和产品介绍链接地址请参考腾讯云官方网站)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Caliburn.Micro Bootstrapper及IOC容器配置

CM获得View实例的方式 在配置IOC容器之前,我们先看看,CM获取实例的方式。清楚的知道CM在内部是如何使用IOC的,才能更好的配置IOC。...(object instance) :IOC容器注入实例的方法 Bootstrapper配置实例 MEF是一个.net的插件框架,也可以作为一个依赖注入容器(IOC使用。...也就是说我们MEF作为IOC容器的时候,主要使用export部件相关的功能。不了解MEF的话,请了解一下MEF再看以下内容会比较容易理解。...所以如果你把View和ViewModel都注入到IOC容器中,应该是可以不需要AssemblySource的。...batch.AddExportedValue(container);//只是个习惯,这样就可以在任何地方通过IOC使用container了 container.Compose(batch

91130
  • Ioc模式和MEF

    选择MEF方式 .net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuilder,StructureMap,Spring.Net等,这些第三方工具各不相同...,但功能大体都相同,大都需要事先对接口实现进行配对(通过代码或配置文件),然后由系统自动或手动来通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。   ...MEF相对于上面的这些IOC容器有什么优势呢?...下面是我推荐的理由: 1..net4.0 自带:MEF的功能在 System.ComponentModel.Composition.dll 程序集中,直接引用即可使用,不用安装第三方组件 2.0 配置:...MEF是不需要使用配置文件或代码对接口实现进行一一配对的,只需要简单的使用几个Attribute特性,就能自动完成源目标的配对工作 3.自动化:系统初始化时自动遍历程序目录或指定文件夹下的dll,根据程序集中接口类的特定

    49320

    .NET自带IOC容器MEF之初体验

    本文主要把MEF作为一种IOC容器进行讲解,.net中可用的IOC容器非常多,如 CastleWindsor,Unity,Autofac,ObjectBuilder,StructureMap,Spring.Net...等,这些第三方工具各不相同,但功能大体都相同,大都需要事先对接口实现进行配对(通过代码或配置文件),然后由系统自动或手动来通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。...MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要求定义一些扩展点,之后扩展人员就可以使用这些扩展点应用程序交互;同时MEF...如何声明一个部件-导入导出 导出”是部件向容器中的其他部件提供的一个值,而“导入”是部件向要通过可用导出满足的容器提出的要求。...container.ComposeParts(this); 下面我们使用一个简单的列子学习使用MEF 1、         项目结构图 ?

    1.8K21

    C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

    我们首先将应用程序配置为使用IoC容器。本例中我们使用内置容器,但是Caliburn.Micro可以很好地处理任何容器。首先,继续学习第1部分的代码。我们将以此为出发点。...首先,我们重写引导程序类的Configure方法。这使我们有机会设置IoC容器,并执行我们可能希望执行的任何其他框架配置,例如定制约定。...配置完容器后,我们需要告诉Caliburn.Micro如何使用它。这就是后面三个覆盖的目的。框架需要“GetInstance”和“getAllInstance”。...您可以启动并运行MEF,还可以处理引导程序的其他一些关键扩展点。 当然,只要提供“GetInstance”和“GetAllInstances”的实现,就可以使用所需的任何IoC容器。...02 给智者的话 虽然Caliburn.Micro确实通过引导程序的覆盖和IoC类提供ServiceLocator功能,但您应该避免在应用程序代码中直接使用它。

    95010

    C# MEF入门讲解

    要干掉工厂里面的if,则必须要请出ioc容器了。MEF就是微软自家的托管可扩展框架,在这里被我用成了ioc容器,其他的功能,不求甚解。 我们先拿MEF练练手,再应用到具体的项目中。...var assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly);//此处这一句实际上没啥用,因为此程序集下没有任何我们需要的实例...我们已经成功的创建了三个类的实例,但主程序并没有引用这个类库。 也可以说,我们将类的实例成功的注入到了主程序。...从这个小例子,我们可以学到,使用MEF三步骤:1、导出所需的类型(部件),2、在合适的目录(AssemblyCatalog、DirectoryCatalog)中查找。3、将找到的部件加入到容器。...之后你就可以使用容器中的已经New好的实例了。

    72420

    深入理解DIP、IoC、DI以及IoC容器 摘要

    控制反转(IoC) DIP是一种 软件设计原则,它仅仅告诉你两个模块之间应该如何依赖,但是它并没有告诉如何做。IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合。...高层模块Order类不应该依赖于低层模块SqlServerDal,AccessDal,两者应该依赖于抽象。那么我们是否可以通过IoC来优化代码呢?答案是肯定的。...IoC有2种常见的实现方式:依赖注入和服务定位。其中,依赖注入使用最为广泛。下面我们将深入理解依赖注入(DI),并学会使用。...我们再回到上面那个问题,如何将SqlServerDal对象的引用传递给Order类使用呢?...Unity:  http://unity.codeplex.com/ 注:根据园友 徐少侠 的提醒,MEF应该IoC容器。

    62030

    深入理解DIP、IoC、DI以及IoC容器

    控制反转(IoC) DIP是一种 软件设计原则,它仅仅告诉你两个模块之间应该如何依赖,但是它并没有告诉如何做。IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合。...高层模块Order类不应该依赖于低层模块SqlServerDal,AccessDal,两者应该依赖于抽象。那么我们是否可以通过IoC来优化代码呢?答案是肯定的。...IoC有2种常见的实现方式:依赖注入和服务定位。其中,依赖注入使用最为广泛。下面我们将深入理解依赖注入(DI),并学会使用。...我们再回到上面那个问题,如何将SqlServerDal对象的引用传递给Order类使用呢?...Unity: http://unity.codeplex.com/ 注:根据园友 徐少侠 的提醒,MEF应该IoC容器。

    1.1K80

    C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥

    最后,它必须在模式对话框中显示结果,并用另一个异步任务响应用户的对话框选择使用标准的事件驱动异步模型实现这一点并不是一种愉快的体验。然而,这是一个使用协同程序来完成的简单任务。...EventArgs 操作触发器关联的任何事件参数。 Target 存在实际操作方法的类实例。 View 目标关联的视图。 Method MethodInfo指定要在目标实例上调用的方法。...Key Index 存储/检索框架扩展可能使用任何附加元数据的位置。...让我们看看您可能如何做到这一点,但通过使用稍微不同的场景,动态下载xap: using System; using System.Collections.Generic; using System.ComponentModel.Composition...在这种情况下,我们依赖于IShell。您还可以注入容器,但在本例中,我选择在内部使用IoC静态类。一般来说,你应该避免直接从容器中取出东西。

    48720

    【翻译】Prism4:初始化Prism应用程序(上)

    什么是Bootstrapper(引导程序) bootstrapper负责初始化使用Prism类库搭建的应用程序 使用bootstrapper,你可以更方便的控制Prism类库组件你的应用程序之间的关系...Prism类库包含一个默认的抽象基类Bootstrapper 这个类型可以任何容器一起使用 这个类型中的大多数方法都是虚方法 你可以在你的bootsrapper实现中重写这些方法 引导程序执行的基本步骤如下...这主要是因为框架画面依赖于服务 这些服务类似区域主管 这些服务在框架画面显示之前被注册 关键决定 当你决定使用Prism类库 还需要做出一些额外的决定: 必须决定是使用MEF、Unity还是其他的依赖注入容器...这决定你应该选择哪个bootstrapper类型 还是需要为你自己的依赖注入容器创建一个新的bootstrapper类型 你应该考虑你系统中的特殊服务单元, 这些需要注册到依赖注入容器内 判断是否系统内部集成的日志服务足够你使用了..., 如果不够你要自己创建你自己的日志服务 决定系统如何发现模块 使用目录查找、配置文件、或者xaml来加载模块 (模块必须由明确的特性代码标记) 关键场景 指定有序的启动环节 对你创建Prism应用程序来说非常有用

    79820

    无特性的 MEF 配置方法

    最后,我将讨论如何将约定驱动的配置加入到应用程序模型中,以及它如何使用 MEF 和现成的 DI 准则变成一件非常简单的事情。...约定驱动的配置 现在,我已具有正常工作的代码特性化版本,我想说明如何使用 RegistrationBuilder 将这些代码段转换为约定驱动的模型。让我们先删除所有添加了 MEF 特性的类。...在我的示例中,由于只有一个构造函数,因此,我可以使用选择第一个也是唯一一个构造函数的简单案例。...因此,使用 MEF 可将扩展应用程序的操作变得非常简单;并且通过使用 RegistrationBuilder,只要新版本实现了 IWeaterServiceProvider,我就不需要执行任何操作以使其在我的应用程序中使用...如果您考虑我讨论的示例,您就会看到我们似乎确实不再需要使用特性了。现在,可以使用基于约定的模型实现您使用特性化编程模型执行的任何操作。

    1.3K50

    C# WPF MVVM模式Caliburn.Micro框架下事件发布订阅

    02 创建事件 这里我们创建一个公共接口类PersonInfoEven并继承自PubSubEvent,并传入一个PersonInfo对象 public class PersonInfo {.../方式② Task.Run(action); }); } 这样,一个发布/订阅的事件就完成了,也可以在任何时候取消事件注册...combobox绑定(list、Dictionary) C# WPF MVVM模式下在主窗体显示子窗体并获取结果 C# WPF Caliburn.Micro框架下利用Mef...加载其它项目界面 C# WPF文本框TextEdit不以科学计数法显示 C# 通过正则表达式来限制控件输入有效性 C# datagridview、datagrid、GridControl增加行号 C# =>符号的使用...C# 无意间写了一段线程死锁的代码 C# 看懂这100+行代码,你就真正入门了(经典) C# WPF项目实战(经典) WPF 如何修改button圆角(经典) WPF XAML 为项目设置全局样式

    1.9K10

    业界首个SD-WAN标准:MEF-70一览(文末附下载链接)

    SD-WAN包括一个提供智能路径选择的基于应用程序的集中式策略控制器,以及一个可选的路由转发器。 ——IDC ? 但城域以太网论坛(MEF)希望改变这一点。...6.1 Service Attributes MEF服务(如SD-WAN)是使用服务属性指定的。服务属性可以捕获服务提供者和MEF服务订阅者之间达成一致的特定信息,并描述服务行为的某些方面。...服务属性描述了在SD-WAN服务中如何处理流量相关的规则和策略。但是,它们并不限制服务提供者如何实现服务,也不限制订阅者如何实现其网络。...这种类型的连接在SD-WAN服务中的运行方式任何其他用户网络位置没有区别 - 尽管对于云连接,SD-WAN边缘通常是虚拟网络功能(VNF),而对于其他站点,SD-WAN Edge可以是物理网络功能(PNF...MEF首席技术官Pascal Menezes表示,MEF预计将在明年交付其中的一些升级服务。MEF还在研究包括安全性、基于意图的网络以及信息和数据建模等SD-WAN相关的标准。

    1.2K30

    使用 MEF 轻松实现云部署

    在本文中,我们将看看如何使用 MEF 使云部署更易于管理一点、更灵活一些。MEF(以及 Unity 之类的类似框架)是一种软件结构,可将开发人员从管理依赖关系解析、对象创建和实例化等工作中释放出来。...通过在我们的部署中将 MEF StorageClient API 结合在一起使用我们不必重新利用或重新部署我们的 Web 角色,便可以部署和提供新类。...请注意,尽管我们在此处使用的是 MEF,但使用 Unity、Castle Windsor、StructureMap 或其他任何类似容器并按照相似结构应该会取得相同的结果,主要差异体现在语法和类型注册语义上...遗憾的是,当前对象模型没有适当的接口或者可轻松重复使用的定义的代码库,因此,使用一点继承以及一些封装可能是最佳选择。...您可以将此配置为在部署内发生,但问题之一是如何进行协调。为此,要求协调实例的重新启动,因此,或者需要选择一个首要实例,或者要具有某个投票系统。

    1.3K70

    C# WPF MVVM开发框架Caliburn.Micro关于关于Actions⑤

    我们将在下面更详细地讨论方法保护。 02 Action 目的 现在您可能想知道如何指定ActionMessage的目标。看看上面的标记,没有任何可见的迹象表明目标是什么。那么,这是从哪里来的呢?...让我们看看如何使用视图优先技术(gasp!)将此应用于实现MVVM。...MEF配置前面看到的相同,因此为了简洁起见,我省略了它。唯一改变的是视图的创建方式。...请注意,Message.Attach声明都没有指定应该发送消息的事件。如果不使用该事件,解析器将使用ConventionManager来确定用于触发器的默认事件。对于按钮,它是单击。...因此,我们已经讨论了如何将Interaction.TriggersActionMessage结合使用,包括参数文字、元素绑定3和特殊值的使用

    2.1K20

    02Prism WPF 入门实战 - 建项

    设计目标 为了实现下列目的:创建能够由模块组成的程序,这些模块能够被单独地编写、组装、部署,并且对于程序来说是可选的 最小化团队之间的依赖,让每个团队专注特定的领域。...此外,由于通用服务和组件都被完全地测试过了,开发团队能够专注于程序需求而不是如何实现和测试基础代码。(以上内容均来自网络。)...3.界面交互:命令区(主、副命令区划分等级根据影响范围来确定)、工作区、交互逻辑。...2.新建项目时,使用模板‘Prism Blank App’创建应用,选择DryIOC 3.创建一个业务模块 IoC:是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。...按照以上思想设计的框架都叫IoC,它只是这一类框架的总称。IoC的框架有很多种例如MEF、Autofac、Castle Windsor、Unity。

    85110

    Asp.Net Mvc3.0(MEF依赖注入理论)

    MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要求定义一些扩展点,之后扩展人员就可以使用这些扩展点应用程序交互;同时MEF...使用 MEF 编写的可扩展应用程序会声明一个可由扩展组件填充的导入,而且还可能会声明导出,以便向扩展公开应用程序服务。 每个扩展组件都会声明一个导出,而且还可能会声明导入。 ...如何声明一个部件-导入和导出 导出”是部件向容器中的其他部件提供的一个值,而“导入”是部件向要通过可用导出满足的容器提出的要求。...public string GetTestString() { return "Hello World"; } } 这样我们使用...ImportMany] public IEnumerable Repository { get; set; } 这样调用Repository就可以进行选择

    70930

    CenturyLink绘制了自己的虚拟化蓝图

    虚拟服务开发和支持的副总裁Simlot,FierceTelecom讨论了CenturyLink如何利用开放式网络自动化平台(ONAP)构建自己的业务流程工具(称为”Victor”),用于网络功能虚拟化基础架构...CenturyLink的一位发言人表示,电信公司仍在评估如何将”Victor”纳入开源,但ONAP看起来是一个很好的选择。 CenturyLink正处于软件定义网络(SDN)和NFV的第三次迭代。...我们确实关注所有开源软件,但我没有听到团队对ONAP刚刚发布的新功能的任何反馈。 FierceTelecom:CenturyLink是否是任何开源社区的成员?...我们MEF的成员,我们的首席技术官(Aamir Hussain)是MEF的董事会成员,我们积极参与MEF,但我们现在不是任何开源组织的成员。...Simlot:我认为这可能有点奇怪,但在我看来,我们花了很多时间来研究如何安排NFV。一旦进入这个领域,我们需要花费更多的时间在NFV的管理上。

    31130

    SD-WAN入门,看这一篇就够了

    MPLS相比,使用宽带服务的最大缺点是宽带更加不可预测,并且SLA无法保障。相比较而言,MPLS延迟更低和丢包少。...很多公司都会选择使用MPLS来处理关键业务流量,而其他情况选择使用较便宜的宽带和4G/5G。 SD-WAN架构 2019年8月,MEF发布了MEF 70,推出了SD-WAN的第一个标准化定义。...如何选择SD-WAN 我们选择SD-WAN时通常需要考虑以下特征: 路径选择——路径选择应该是动态的,并且要基于传输介质和应用。SD-WAN应该能够自动区分用户正在运行的数千种不同的应用程序。...报告-在考虑使用SD-WAN解决方案时,报告是一个经常被忽视的因素。我们需要确保能够拥有所需的报告功能。 还有一些其他的因素需要考虑。...首先,需要确定企业是自己部署SD-WAN,还是使用其他提供商的服务,许多SD-WAN提供商都提供了完全管理的SD-WAN部署场景。其次要确保对组织进行了全面的评估,针对企业的需求确定合适的架构。

    3.2K30
    领券