我真的希望这不是一个愚蠢的问题,但我无法识别使用Caliburn.Micro将依赖关系注入视图模型的直接方法.

我有一个像这样的主壳(导体):

public class Shellviewmodel : Conductor<IScreen>.Collection.OneActive,IShell
{
    public Shellviewmodel(IEventAggregator eventAggregator) {
        ActivateItem(new Dashboardviewmodel());
    }
}

现在我想将一个服务注入Dashboardviewmodel,但由于ActivateItem方法要求我传递一个实例(而不是一个类型),我不得不自己提供服务.由于Shellviewmodel不知道底层IoC容器,我必须将服务注入shell …对我来说,看起来Caliburn正在尝试强制执行应用程序中所有视图模型和依赖项的完整图形.

我知道我可以使用静态访问器来控制容器的反转,但我真的不喜欢这种方法,因为我想为我的应用程序(引导程序)创建一个组合根,而不需要知道其他部分关于依赖注入等.

解决方法

几种方法可以完全依赖于您选择的容器.

MEF [ImportMany]在构造函数中使用的参数将执行实际导入引用Hello Screens示例

在IoC静态类中,您可以使用IoC.Get< IDashBoard>()或IoC.GetAll< IDashBoard>(),这假设您已将类型注册到您使用的容器中.注意这个可以过度使用并导致反模式行为.我在我的一个执行仪表板的应用程序中执行了此操作,在我的Container实例中使用IDashBoard标记的任何内容与实际实现类相关联将被拉入集合IoC.GetAll< IDashboard>()或第一项在基于IoC.Get< IDashBoard>()的集合中.

您还可以使仪表板继承Conductor< IDashBoard> .Collection.AllActive,允许您访问Items属性(作为Collection的一部分),并使用IoC.GetAll< IDashboard>填充DashBoardviewmode的CTOR( )在那个地方获得仪表板上所需的所有物品.从那里,我查询OnActivate中的Items集合属性,并将其他viewmodels与我需要的属性相匹配,并相应地在DashBoardView上放置名为ContentControls.

这确实是从您选择的容器中拉出来的,记住您可能只想要容器的方法来通过其预期的设计获取必要的物品.

我实际上离开了MEF,因为CM中使用的版本不适用于Open Generics并且调试缺少Export()属性开始让我疲惫不堪.

c# – 如何在Caliburn.Micro中将依赖项注入视图模型?的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  3. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  4. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  5. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

  6. ios – 编程嵌入UIViewController?

    我有一个带有一个容器视图的UIViewController的Storyboard设置,以便我可以在其中嵌入另一个UIViewController.在某种情况下,我需要更改嵌入式视图控制器.在我的故事板中,我的容器视图不能有两个区段.这导致我以编程方式进行.我的容器视图在我的故事板,没有连接的嵌入.现在从这一点开始,我如何以编程方式嵌入我所选择的UIViewController对象?

  7. ios – 使用Swift访问非默认的Cloudkit容器

    我有一个IOS8应用程序,它成功地将记录写入其默认的Cloudkit容器.现在我希望在OSX下的不同应用程序中读取和处理这些记录.我已经设置了具有iCloud访问权限的新应用程序,并选中了“指定自定义容器”选项.这已成功找到原始应用程序和我的容器没有错误要在Capabilities界面上修复.我的所有搜索都告诉我“同一个开发人员签署的两个应用程序可能共享同一个容器”但我找不到的任何教程文档都告诉我

  8. ios – 嵌入在容器视图中的UINavigationController,显示大小错误的表视图控制器

    我正在尝试找到解决这种情况的方法:我有一个UITabBarController它的一个segue连接到一个容器视图控制器(BannerViewController),我用来嵌入一个UINavigationController,导航控制器推送其他容器视图控制器(EventListContainerviewController),每个包含一个tableview控制器.这是我的故事板上的一个屏幕问题是最

  9. 在ios 6中,如何在View控制器中使用“容器视图”对象和嵌入在其中的表视图控制器之间使用传递数据?

    我有一个带标签和文本字段的视图控制器.我还添加了一个容器视图,它指向另一个具有一个部分和3行的表视图控制器,基本上是静态表视图.我无法找到任何文档/示例,告诉您如何在容器视图中嵌入容器视图和表视图容器的View控制器之间传递数据.我想要双方沟通?

  10. ios – 在容器视图中嵌入集合视图 – 顶部有额外的空白区域

    我有一个使用NavContoller作为它的初始VC的应用程序,然后它有一个根UIViewContoller,在上半部分包含一个UIView,在底部包含一个UIContainerView.在UIContanerView中,我嵌入了一个工作的UICollectionView,其中包含可以转换为详细视图的图像按钮.问题是,空白区域现在显示在UICollectionView的顶部.鉴于这个高约64像素,

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部