C# 使用Caliburn Micro和MEF的多视图模型
我正在设计一个带有多个ViewModels的WPF应用程序,我正在使用Caliburn Micro和MEF。不幸的是,我是MEF和IoC的新手,无法解决任何问题 应用程序应该有一个MainView,其中有几个选项,例如:创建新记录、编辑旧记录、查看报告等。因此,对于这些单元中的每一个,我都有不同的视图模型类,如CreateRecordViewModel、EditRecordsViewModel、ViewReportsViewModel,以及CreateRecordView等视图的用户控件,EditRecordsView、ViewReportsView等 现在,MainViewModel是一个导体,我使用的代码如下:C# 使用Caliburn Micro和MEF的多视图模型,c#,wpf,mvvm,mef,caliburn.micro,C#,Wpf,Mvvm,Mef,Caliburn.micro,我正在设计一个带有多个ViewModels的WPF应用程序,我正在使用Caliburn Micro和MEF。不幸的是,我是MEF和IoC的新手,无法解决任何问题 应用程序应该有一个MainView,其中有几个选项,例如:创建新记录、编辑旧记录、查看报告等。因此,对于这些单元中的每一个,我都有不同的视图模型类,如CreateRecordViewModel、EditRecordsViewModel、ViewReportsViewModel,以及CreateRecordView等视图的用户控件,Edi
public class ShellViewModel : Conductor<object>
{
public void ShowCreateRecord()
{
ActivateItem(new CreateRecordViewModel(...Dependencies...));
}
public void ShowEditRecords()
{
ActivateItem(new EditRecordsViewModel(...Dependencies...));
}
...
}
由于MEF容器驻留在Bootstrapper中,因此我对如何在这个MainViewModel中使用构造函数注入有点迷茫。我的第二个关注点是GC。如何测试创建的ViewModels是否已正确处置
我知道这些问题可能看起来有点愚蠢,但我真的很想找到一个解决办法。我应该用[Import]来装饰我的属性设置器,而不是使用构造函数注入吗?我自己对MEF并不熟悉,但大多数DIs都是以类似的方式工作的。 您必须将容器的MEF容器注入视图模型,并使用容器解析适当的视图模型 您不应该自己实例化viewmodels,而是在主vm中,再次通过构造函数或属性注入注入容器解析服务-不太熟悉MEF,然后调用ActivateItem\u DependencyService.Resolve 顺便说一句,主VM本身也应该由容器实例化,因此您显然不需要手动将容器注入主VM IoC只是信任容器为您解决任何问题,否则,就是容器注册的类型注册错误:
public class ShellViewModel : Conductor<object>
{
private readonly IMefDependencyContainer _container;
public ShellViewModel(IMefDependencyContainer container) {
_container = container;
}
public void ShowCreateRecord()
{
ActivateItem(_container.Resolve<CreateRecordViewModel>());
}
}
替换IMefDependencyContainer并用其名称在MEF中解析。我知道传统的方法,因为我以前使用过Unity,但MEF的方法有点不同,因为需要使用导出和导入等属性。我很久以前就使用过MEF,这是相同的想法,但不是使用构造函数,声明一些DI属性,例如接口类型不具体的容器,并用这些属性标记它们。一旦您手头有了DI容器,您将在那里找到解析可能也具有DI属性的新实例的方法。