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