Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 通过IoC或MEF解析视图,而不是使用SelectedAssemblies()方法_Mvvm_Mef_Ioc Container_Caliburn.micro - Fatal编程技术网

Mvvm 通过IoC或MEF解析视图,而不是使用SelectedAssemblies()方法

Mvvm 通过IoC或MEF解析视图,而不是使用SelectedAssemblies()方法,mvvm,mef,ioc-container,caliburn.micro,Mvvm,Mef,Ioc Container,Caliburn.micro,我在Spring.net中使用Caliburn.Micro,而不是默认的简单IoC。我的自定义引导程序(由Caliburn的引导程序数据库驱动)正在工作,我可以在Spring.net中定义ViewModels。但是视图仍然通过执行程序集的反射(名称约定)来解析。我使用引导程序的以下方法添加用于解析ViewModels视图的程序集 protected override IEnumerable<Assembly> SelectAssemblies() {

我在Spring.net中使用Caliburn.Micro,而不是默认的简单IoC。我的自定义引导程序(由Caliburn的引导程序数据库驱动)正在工作,我可以在Spring.net中定义ViewModels。但是视图仍然通过执行程序集的反射(名称约定)来解析。我使用引导程序的以下方法添加用于解析ViewModels视图的程序集

    protected override IEnumerable<Assembly> SelectAssemblies()
    {
        // hmm, want to change the way how the view is resolved... how to do this?
        // ... use IoC or MEF for this task instead?
        return new[]
                   {
                       // don't want to add every dll here
                       this.GetType().Assembly,
                       Assembly.Load("MyViewModels.Assembly") 
                   };
    }

谢谢你的提示。

首先,我不知道caliburn.micro,所以这可能是错误的

查看方法
LocateTypeForModelType
时,它似乎要求
AssemblySource
查找可用的类型,这些类型应该根据

因为上面所有的都是静态类,我怀疑没有办法继承和重写这种行为。因为它们是静态的,所以可以将程序集添加到公共可观察字典中——这感觉有点像黑客,而且
SelectAssemblies
似乎是正确的方法

然而,在我看来,由于有解析
视图
视图模型
的约定,因此可以对程序集执行相同的操作,这就引出了一个问题:如何决定扫描哪些程序集以查找
视图模型
/
视图
。 该策略可以内置到
SelectAssemblies
方法中

如果要更改caliburn.micro在这些程序集中查找正确视图的方式,从而有效地更改/添加约定

最后回答您的问题:“通过IoC或MEF而不是使用SelectedAssemblies()方法来解决视图”:Imo这种做法违背了Caliburn的理念。Micro:

Micro使用约定来解析来自给定程序集的视图-尝试使用IoC容器而不是基于名称/命名空间的约定与该方法相矛盾

protected virtual Control ResolveViewForModel(Type modelType) {...}