Tag: mef

将实例添加到MEF容器中

如何将已创建的实例添加到MEF容器/目录中以在解析Imports时使用。 我想要Unity在其容器上使用RegisterInstance方法提供的function。

使用MEF从shell加载prism模块视图

我有一个shell项目,它将我的引导程序中的模块加载到我的shell主视图中的选项卡控件中。 我刚刚在我的标签项上实现了一个关闭按钮,现在提出了如何从shell重新加载模块视图的问题? 尝试使用 moduleManager.LoadModule(“ModuleA”); 但这仅在首次加载模块时有效。 当我调用上面的内容时,它会加载并初始化模块,显示视图。 如果我然后再次关闭视图,第二次我尝试这个它不会重新显示视图(我猜它不会重新初始化模块,因为它已经加载)。 所以,我虽然考虑过在shell中使用以下内容: var moduleAView = ServiceLocator.Current.GetInstance(); regionManager.Regions[“TabRegion”].Add(ModuleAView); regionManager.Regions[“TabRegion”].Activate(ModuleAView); 这种方法的问题是我的shell如何知道第1行中的ModuleAView类型? 我没有对模块A的引用,也不想添加模块。 我想到了ModuleAView将实现的一个通用接口,它可以在模块和shell之间共享,但是在尝试使用上面的ServiceLocator.GetInstance方法时遇到了组合错误。 非常感谢您的帮助。 PS这是我试过的模块A模块代码。 [ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)] [Module(ModuleName=”ModuleA”)] public class ModuleA : IModule { private IRegionManager _regionManager; [ImportingConstructor] public ModuleA(IRegionManager regionManager) { this._regionManager = regionManager; } public void Initialize() { // add the search view to the region manager. […]

Caliburn Micro – >从多个视图/ UserControls / CustomControls组合视图

如何在CM托管窗口中重用和组合部件? 我找到了关于使用两个UserControl来绑定到同一个ViewModel的post,但是如果我想在同一个窗口中创建多个视图和视图模型,那就没那么多了。 (每个视图的视图模型组成“主视图”) 我的问题的第一部分是如何分解组件以便重复使用? 如果我有一个窗口的两个区域,其中一个是数据网格,另一个是带有标签和文本框的详细信息视图,这些区域应该是单独的用户控件,自定义控件还是窗口? 理想情况下,每个人都可以独立,因此可以将它们分开并用于其他窗户。 因此,如果它们被分开,我最终会得到2个视图模型和2个视图。 现在假设我想创建3个窗口,一个窗口带有第一个视图,第二个带有第二个视图,第三个带有两个视图。 如何使用CM为每个视图创建窗口并将每个视图连接到其视图模型? 从我看到的例子中,我在窗口中看到了大部分视图和视图模型。

MEF GetExports 使用AllowMultiple = True返回任何内容

我不太了解MEF,所以希望这是我认为它的工作原理的简单解决方法。 我正在尝试使用MEF来获取有关类的一些信息以及如何使用它。 我正在使用元数据选项来尝试实现此目的。 我的接口和属性如下所示: public interface IMyInterface { } public interface IMyInterfaceInfo { Type SomeProperty1 { get; } double SomeProperty2 { get; } string SomeProperty3 { get; } } [MetadataAttribute] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class ExportMyInterfaceAttribute : ExportAttribute, IMyInterfaceInfo { public ExportMyInterfaceAttribute(Type someProperty1, double someProperty2, string someProperty3) : base(typeof(IMyInterface)) { SomeProperty1 = someProperty1; SomeProperty2 […]

编写Visual Studio 2010插件,想在代码编辑器中显示像Resharper这样的工具箱

我想为Visual Studio 2010编写一个插件,但实际上我遇到了一些问题。 我想做的事情似乎很简单,我想在代码编辑器中选择文本时会出现一个小工具箱,例如Resharper(带有帮助重构的菜单的小笔)或者像这里: http://www.axtools.com/products-vs2010-extensions.php?tab=selection-popup 我想知道 : 是否有anu Visual Studio模板有助于启动? 我尝试使用“编辑器视口装饰”,但我不确定。 我应该从启动工具箱开始,还是可以从系统工具箱中显示一些按钮? 在链接的axtools插件中,它是一个定制的工具箱或系统? 如何检测文本被选中? 我现在没有其他问题了。 我是网络开发者,所以编写一个visual studio插件对我来说是个新事物。 提前致谢。

创建导入的MEF部件的多个实例

目前我的WPF应用程序导入了这样的部分 [Import(typeof(ILedPanel)] public ILedPanel Panel { get; set; } 但是这给了ma实现ILedPanel的类的单个intance。 我真正想要做的是能够创建我需要的尽可能多的实例。 请注意,在任何给定时间,软件中只包含一个ILedPanel导出。 (如果我使用带有List的导入,为每个实现ILedPanel的类提供一个实例) 有什么建议?

ASP.NET MVC:视图引擎无法找到使用由MEF加载的模型类型的视图

我正在尝试创建一个框架,允许将控制器和视图动态导入MVC应用程序。 到目前为止它是如何工作的: 我正在使用.NET 4,ASP.NET MVC 3 RC和Razor ViewEngine 每个项目使用MEF导出和导入控制器 – 我从一个给定项目调用一组控制器和视图“模块” 使用MEF发现的程序集由BuildManager使用预应用程序启动方法和BuildManager.AddReferencedAssembly动态引用。 使用构建事件将二进制文件(来自导出项目)和视图复制到目标项目的文件夹结构中 使用自定义控制器工厂选择控制器,该工厂inheritance自DefaultControllerFactory并覆盖GetControllerType() 使用自定义视图引擎选择视图,该引擎inheritance自RazorViewEngine并覆盖GetView()和GetPartialView()以允许它在特定于模块的视图目录中查找视图 除了使用强类型模型的视图外 ,一切都可以工作。 使用动态模型的视图工作正常,但是当我使用@model指定模型类型时,我得到一个YSOD,其中显示“未找到视图’索引’或其主文件”。 在调试我的ViewEngine实现时,我可以看到: this.VirtualPathProvider.FileExists(String.Format(this.ViewLocationFormats[2], viewName, controllerContext.RouteData.GetRequiredString(“controller”)))返回true,而 this.FileExists(controllerContext, String.Format(this.ViewLocationFormats[2], viewName, controllerContext.RouteData.GetRequiredString(“controller”)))返回false。 在Reflector中, FileExists()的RazorViewEngine实现最终实现了这样做: return (BuildManager.GetObjectFactory(virtualPath, false) != null); 但是,我无法从Reflector查看BuildManager.GetObjectFactory() ,因为它以某种方式隐藏。 我怀疑它与模型类型是从MEF加载的类型这一事实有关,但由于我已经引用了MEF从BuildManager发现的程序集,因此我没有引导。 任何人都可以更深入地了解可能发生的事情吗? 更新:原来我在.NET 4之前使用的是过时版本的Reflector。我现在可以看到GetObjectFactory(),但我似乎找不到任何有用的东西。 我已经尝试将其添加到我的FindView()重载中: try {var path = String.Format(this.ViewLocationFormats [2],viewName,controllerContext.RouteData.GetRequiredString(“controller”)); var objFactory = System.Web.Compilation.BuildManager.GetObjectFactory(virtualPath:path,throwIfNotFound:true); } catch {} 不幸的是, objFactory最终为null,并且不会抛出任何exception。 […]

MEF:如果我有多个出口但只需要一次导入怎么办?

我想把我的思绪包裹在MEF周围。 有一件事我不明白。 假设我有一个名为ISomething的接口,它是一个契约,我在包含我的应用程序的文件夹中有多个程序集,我不知道它们中有多少ISomething实现,或者哪一个包含一个。 如果我创建一个我使用MEF的主机应用程序,并希望得到一个ISomething,但只有一个,MEF如何决定它将给我哪个实现? 或者,与常见的IoC容器类似,如何告诉它应该使用哪个实现? 提前感谢您的回答。

Caliburn.Micro + MEF +现代用户界面:IContent事件

我已经使用Caliburn.Micro和Modern UI( https://mui.codeplex.com )开始了一个项目,并且在我的视图模型上触发IContent的导航事件时遇到了一些困难。 我已经让两个人联系起来,彼此合作以下内容: CM Bootstrapper: public class CMBootstrapper : Bootstrapper { private CompositionContainer container; private DirectoryCatalog catalog; public CMBootstrapper() { } protected override void Configure() { catalog = new DirectoryCatalog(“.”, “*.*”); container = new CompositionContainer(catalog); var compositionBatch = new CompositionBatch(); compositionBatch.AddExportedValue(new WindowManager()); compositionBatch.AddExportedValue(new EventAggregator()); compositionBatch.AddExportedValue(container); container.Compose(compositionBatch); } protected override IEnumerable SelectAssemblies() { List […]

棱镜4 – 局部范围的RegionManager

我有使用PRISM 4的silverlight 4应用程序,我正在使用MEF。 我的Shell定义了一个加载模块的主要区域,我希望模块有自己的RegionManager,因此它们定义的区域是本地RegionManager而不是global的位置。 并且我希望在模块内部通过容器(对于类型IRegionManager)解析此本地RegionManager。 但是来自文档的方法: IRegion detailsRegion = this.regionManager.Regions[“DetailsRegion”]; View view = new View(); bool createRegionManagerScope = true; IRegionManager detailsRegionManager = detailsRegion.Add(view, null, createRegionManagerScope); 对我来说不起作用,当从子视图中解析IRegionManager时,我仍然得到GlobalRegionManager。