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

MEF:我应该把CompositionContainer放在哪里?

MEF (Model-View-Controller) 是一种用于软件设计、开发和维护的编程框架。它通过将模型(Model)、视图(View)和控制器(Controller)分离,帮助开发者更高效地创建具有可扩展性和可维护性的应用程序。MEF 的主要优势在于其可组合性和灵活性,使开发者能够根据需求轻松地组合不同的组件。

MEF 放在哪里

在基于 MEF 的应用程序中,CompositionContainer 是控制组件组合的核心类。在决定将 CompositionContainer 放哪里时,需要考虑以下因素:

  1. 模块化: 将 CompositionContainer 放在底层库或框架中,确保其与其他组件和库保持独立。这有助于提高代码的可维护性和可扩展性。
  2. 应用程序核心: 在应用程序的核心层(如主应用程序窗口、UI 框架等)放置 CompositionContainer,从而确保与用户交互的组件能够方便地接收来自模型和视图的数据。
  3. 逻辑层: 在应用程序的逻辑层(如控制器、服务、工作流等)放置 CompositionContainer,以协调各个组件之间的交互。这有助于确保应用程序的整体流程顺畅。

推荐的腾讯云产品和相关链接:

  1. 腾讯云服务器: 提供了稳定、快速、易用的云服务器产品,支持 Linux 和 Windows 操作系统。
  2. 腾讯云数据库: 提供多种类型的数据库产品,如关系型数据库、NoSQL 数据库、内存数据库等,支持跨平台和跨数据库迁移。
  3. 腾讯云网络与通信: 提供安全可靠的网络连接和通信服务,支持 SSL/TLS 加密,支持多种协议如 HTTP/HTTPS、TCP/UDP 等。
  4. 腾讯云人工智能: 提供多种人工智能产品和服务,如智能语音、图像识别、自然语言处理等。
  5. 腾讯云移动开发: 支持跨平台移动应用开发,提供 iOS 和 Android 应用程序模板及 SDK。
  6. 腾讯云存储: 提供稳定、安全、高效的云存储服务,支持对象存储、文件存储、块存储等。
  7. 腾讯云区块链: 提供区块链相关产品和服务,如腾讯云区块链引擎、智能合约等。
  8. 腾讯云云原生: 支持容器化应用、微服务架构等云原生技术,提高应用的可扩展性和可维护性。

以上是关于 MEF 和放置 CompositionContainer 的建议。希望这些信息能为您提供帮助。

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

相关·内容

腾讯数据中心放在了贵州哪里? | 拔刺

今日拔刺: 1、 腾讯数据中心放在了贵州哪里? 2、身为无人机发展强国的以色列,为什么要从中国采购万架大疆无人机? 3、如何定义“生命”?具有高度智能,能自我“繁殖”的机器人是否可以称作“生命”?...本文 | 2096字 阅读时间 | 5分钟 腾讯数据中心放在了贵州哪里? 答案是贵州贵安的栖凤坡。 贵安新区其实位于贵阳市和安顺市之间,所以用这两个地方的地名的第一个字,取名为贵安。...在贵州,如果有这么一个让各大公司都喜欢扎堆建数据中心的地方,那么它就应该在贵安。 华为、富士康、苹果、高通、微软、移动、电信、联通、中兴等企业,据说也将要在贵安新区建立数据中心。...所以,更倾向于广义上的生命,因为对于概念和定义来说。越是宏观的东西,定义越是简短。因为说的越多,限制的就越多,漏洞也会越多,范围就会被缩小而有遗漏。...那样的话,就比较好奇如果机器人不是生命,那怎么通婚?

2.2K50

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

简短说一下MEF的工作原理,MEF的核心包括一个catalog和一个CompositionContainer。category用于发现扩展,而container用于协调创建和梳理依赖性。...MEF原理上很简单,找出有共同接口的导入、导出。然后找到导出的实例化,赋给导入。说到底MEF就是找到合适的类实例化,它交给导入。...var container = new CompositionContainer(catalog) 通过调用容器的ComposeParts()方法可以容器中的部件组合到一起。...container = new CompositionContainer(catelog);//声明容器 container.ComposeParts(this);//容器中的部件组合到一起...container = new CompositionContainer(catelog);//声明容器 container.ComposeParts(this);//容器中的部件组合到一起

1.5K21

MEF框架基础理解

1.概要 什么是MEF? Managed Extensibility Framework (MEF) 是用于创建可扩展的轻量级应用程序的库。 它让应用程序开发人员得以发现和使用扩展且无需配置。...MEF 让扩展不仅可在应用程序内重复使用,还可以跨程序重复使用。 如果聊到MEF不得不提到的是IoC(IoC-Invertion of Control),即控制反转。它是一种程序设计指导思想。...高层模块不应依赖于底层模块,两者应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。 (3)控制反转(IoC):一种软件设计原则,上层对下层的依赖(即底层模块的获得)交给第三方。...summary> [ImportMany] public List Plugs { get; set; } private CompositionContainer...var catalog = new DirectoryCatalog(dir); //将所有DLL对象进行组装 _container = new CompositionContainer

41410

Caliburn.Micro Bootstrapper及IOC容器配置

通常就用MEF作为CM的IOC容器。在MEF中所有export部件都会被作为插件导入到container中,通过container也可以访问每个export对象。...我们在MEF作为IOC容器的时候,通常只需要把类标记为export导入到container就可以了,当然不标记为export的类是无法导入到container的。...也就是说我们MEF作为IOC容器的时候,主要使用export部件相关的功能。不了解MEF的话,请了解一下MEF再看以下内容会比较容易理解。...所以如果你View和ViewModel都注入到IOC容器中,应该是可以不需要AssemblySource的。...} 个人习惯吧View单独放在一个文件夹的不同程序集中,所以我通常是这样做的: protected override IEnumerable SelectAssemblies

80230

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF...interface IShell { } public class MyBootstrapper:Bootstrapper { private CompositionContainer...= new CompositionContainer( new AggregateCatalog(AssemblySource.Instance.Select(x =>...{ _container.SatisfyImportsOnce(instance); } }  我们要实现Bootstrapper这个类 一般...MEF做为容器,重写这个类的三个方法,写法也比较固定,就像上边写的那这样 如果有自己的一些东西需要配置可以写在Config里 除了上边的三个方法还有OnStartup和OnExit分别是程序进入和退出的执行事件

1.1K80

使用 MEF 轻松实现云部署

Joseph Fultz Chris Mabry 下载代码示例 过去几个月中,和一位同事一直在从事一个利用 Microsoft Extensibility Framework (MEF) 的项目。...请注意,尽管我们在此处使用的是 MEF,但使用 Unity、Castle Windsor、StructureMap 或其他任何类似容器并按照相似结构应该会取得相同的结果,主要差异体现在语法和类型注册语义上...图 1 显示,不仅感兴趣的主要类具有此类链,而且实际上,其必需的属性之一也是抽象的。通过所有的抽象,可以很方便地替换部件或以导出所需约定(在本例中是接口)的新库的形式添加附加功能。...(catalog); MEFContainer.ComposeParts(); 现在,我们将运行该站点并且应该会看到容器中提供的类型的转储,如图 5 中所示。...newContainer = new CompositionContainer(catalog); newContainer.ComposeParts(); lock(MEFContainer)

1.3K70

Prism教程二: Bootstrapper

大家好,又见面了,是你们的朋友全栈君。 在程序中使用框架必然要有一个切入点,框架会在这里进行初始化,处理相关配置等。在Prism中扮演这一角色的就是Bootstrapper。...Bootstrapper,不过通常我们大可不必这样做,因为Prism默认提供了两个基于特定容器的Bootstrapper——UnityBootstrapper和MefBootstrapper,分别使用Unity和Mef...Prism中内置了对Unity和Mef的支持,所以有这两种预定义好的Bootstrapper:UnityBootstrapper和MefBootstrapper,其中分别采用UnityContainer...和CompositionContainer作为依赖注入容器。...所以不管使用什么样的容器,都需要提供一个实现了IServiceLocator接口的适配器,如果使用Unity要提供UnityServiceLocator,使用Mef就要提供MefServiceLocator

78920

Prism之Bootstrapper

大家好,又见面了,是你们的朋友全栈君。 在程序中使用框架必然要有一个切入点,框架会在这里进行初始化,处理相关配置信息等。...Bootstrapper,不过通常我们大可不必这样做,因为Prism默认提供了两个基于特定容器的Bootstrapper——UnityBootstrapper和MefBootstrapper,分别使用Unity和Mef...Prism中内置了对Unity以及Mef的支持,所以有两种预定义好的Bootstrapper: UnityBootstrapper和MefBootstrapper,其中分别采用UnityContainer...和CompositionContainer作为依赖注入容器。...所以不管使用什么样的容器,都需要提供一个实现了IServiceLocator接口的适配器,如使用Unity要提供UnityServiceLocatorAdapter,使用Mef要提供MefServiceLocatorAdapter

51610

C# MEF插件的使用及Demo分享

MEF简介 MEF,全称Managed Extensibility Framework(托管可扩展框架)。...单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF有这样一段说明: Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库...通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展。 开始编码 我们新建一个桌面应用程序项目起名为MefDemo ? 在Form1下面增加一个MenuStrip,改名为ms ?...Button的事件就是弹出窗体显示是插件3 ---- 这样代码就完后实现了,编译完成后我们三个插件的DLL放到运行目录下的plugin下面 ---- ?...---- 下面的自己做的这个MEF的DEMO演示视频: ?

2.7K31

2015热门趋势:网络、数据中心和云该期待什么?

网络功能虚拟化(NFV)可让聪明的程序员许多网络应用功能,如负载均衡、缓存和内容过滤转变成在软件定义的网络上运行的应用程序。...认为,安全是可以通过NFV实施的最重要的功能之一,因为你现在可以将安全功能和安全策略嵌入每一个适当的基于SDN的设备。...在过去,例如,将最先进的网络安全设备和每个交换机及路由器放在一起可能还不具备成本效益。有了安全NFV,这几乎是轻而易举的事。...MEF第三类网络举措包括建立互操作性规范,供应商可以用它来编排共享及结合,嗯,跨一切事物的资源。MEF的范围包含网络设备制造商、软件公司、电信运营商、数据中心供应商、云服务提供商,甚至计算机制造商。...MEF正在协同CEF和形成MEF Unite行动的其他行业利益相关者,共同来定义要实现第三类网络关键目标必要的LSO和管理能力。 “高速城域网络将带动企业连接。”

60640

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

使用这些基类可以完成绝大多数应用程序 继承实现bootsrapper, 你需要做的工作只是创建和初始化框架界面 依赖注入 使用Prism类库搭建的应用程序需要使用依赖注入容器 Prism支持Unity和MEF...并且允许使用其他的依赖注入容器 引导程序的部分工作就是装配这个容器 并为容器注册类型 Prism类库包含UnityBootstrapper和MefBootstrapper类 这两个类实现了使用Unity或MEF...bootstrapper负责创建框架画面 这主要是因为框架画面依赖于服务 这些服务类似与区域主管 这些服务在框架画面显示之前被注册 关键决定 当你决定使用Prism类库 还需要做出一些额外的决定: 必须决定是使用MEF...、Unity还是其他的依赖注入容器 这决定你应该选择哪个bootstrapper类型 还是需要为你自己的依赖注入容器创建一个新的bootstrapper类型 你应该考虑你系统中的特殊服务单元, 这些需要注册到依赖注入容器内...override void InitializeShell() { Application.Current.RootVisual = Shell; } 对于WPF应用程序 你必须先实例化shell类型 然后这个实例设置成系统的主窗口

71920
领券