我撞墙了。我添加了另一个具有Service类的程序集的引用。 所以我没有创建一个新实例,而是MEF会帮助(但不会)..我会做类似于HelloScreens示例的事情。以下viewmodel也接受一个属性来保存模型。(Staff)
public class StaffFormViewModel : Screen
{
[Import]
public StaffService staffService { get; set; }
显然这不起作用,因为该类不是由MEF构建的。但即使我想用mef构建它我应该创建多个实例,所以我应该选择 NonShared 。但是人们说它很慢。 Caliburn micro示例添加了类似的内容以创建新实例。这需要每行5行代码。
batch.AddExportedValue<Func<PreferencesCategoriesFormViewModel>>(
() => container.GetExportedValue<PreferencesCategoriesFormViewModel>());
问题是虽然我可以使用它,但如果我想在构造函数中提供一个模型类,我不能因为它是由MEF构造的。我应该手工设置属性。 我想要的只是注入所需的服务。这对mef来说可能吗?我应该公开静态容器,以便我可以引用它并调用compose?请帮助:)
答案 0 :(得分:2)
您提供的示例只是创建一个返回PreferencesCategoriesViewModel
新实例的工厂。他们使用内置的委托类型Func
来保存它们,创建一个新的工厂接口,以及需要引用容器的接口实现。
因此,如果您希望通过MEF实例化视图模型,那么您可以:
如果您打算使用视图模型工厂,那么您可以:
Func
委托类型,如上所示,您可以随时使用带有一个或多个输入参数的其他Func
类型,因为您的子视图模型需要数据有关选项3的示例,请参阅http://pglazkov.blogspot.co.uk/2011/04/mvvm-with-mef-viewmodelfactory.html。
你会注意到他的视图模型工厂引用了MEF容器,他实际上是通过MEF解析的。因此,您的容器需要自行注册。