Wpf MEF问题-出口工厂<;T>;在Caliburn.Micro中
我在Caliburn.Micro中使用MEF导出视图模型类。我希望使用ExportFactory类而不是Export属性,因为我尝试解决与此处所述相同的问题: 我尝试解决这个问题,例如: 某些视图模型-WPF窗口:Wpf MEF问题-出口工厂<;T>;在Caliburn.Micro中,wpf,mef,caliburn.micro,Wpf,Mef,Caliburn.micro,我在Caliburn.Micro中使用MEF导出视图模型类。我希望使用ExportFactory类而不是Export属性,因为我尝试解决与此处所述相同的问题: 我尝试解决这个问题,例如: 某些视图模型-WPF窗口: [Export(typeof(IChatViewModel))] [PartCreationPolicy(CreationPolicy.NonShared)] public class ChatViewModel : Screen, IViewModelIdentity,
[Export(typeof(IChatViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ChatViewModel : Screen, IViewModelIdentity,
IChatViewModel, IHandle<Rp>, IHandle<DetailData>
{}
[Export(typeof(IShellViewModel))]
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel
{
protected override void OnInitialize()
{
ShowLogOn();
base.OnInitialize();
}
public void ShowLogOn()
{
var vm = IoC.Get<ILogOnViewModel>();
//var vm = _viewModelControler.CreateLogOnViewModel();
ActivateItem(vm);
}
public void ShowMessenger(Account account)
{
ActiveItem.Deactivate(true);
var vm = IoC.Get<IMessengerViewModel>();
//var vm = _viewModelControler.CreateMessengerViewModel();
vm.Account = account;
ActivateItem(vm);
}
}
我的外壳看起来像这样:
//SHELL is WPF window
[Export(typeof(IShellViewModel))]
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel
{
[Import]
public IViewModelsControler ViewModelControler{ get; set;}
protected override void OnInitialize()
{
ShowLogOn();
base.OnInitialize();
}
public void ShowLogOn()
{
//var vm = IoC.Get<ILogOnViewModel>();
var vm = ViewModelControler.CreateLogOnViewModel();
ActivateItem(vm);
}
public void ShowMessenger(Account account)
{
ActiveItem.Deactivate(true);
//var vm = IoC.Get<IMessengerViewModel>();
var vm = ViewModelControler.CreateMessengerViewModel();
vm.Account = account;
ActivateItem(vm);
}
}
[Export(typeof(ILogOnViewModel))]
public class LogOnViewModel : Screen,ILogOnViewModel
{}
和shell:
[Export(typeof(IChatViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ChatViewModel : Screen, IViewModelIdentity,
IChatViewModel, IHandle<Rp>, IHandle<DetailData>
{}
[Export(typeof(IShellViewModel))]
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel
{
protected override void OnInitialize()
{
ShowLogOn();
base.OnInitialize();
}
public void ShowLogOn()
{
var vm = IoC.Get<ILogOnViewModel>();
//var vm = _viewModelControler.CreateLogOnViewModel();
ActivateItem(vm);
}
public void ShowMessenger(Account account)
{
ActiveItem.Deactivate(true);
var vm = IoC.Get<IMessengerViewModel>();
//var vm = _viewModelControler.CreateMessengerViewModel();
vm.Account = account;
ActivateItem(vm);
}
}
[导出(类型化(IShellViewModel))]
公共类ShellViewModel:Conductor.Collection.OneActive,IShellViewModel
{
受保护的重写void OnInitialize()
{
ShowLogOn();
base.OnInitialize();
}
public void ShowLogOn()
{
var vm=IoC.Get();
//var vm=_viewModelControler.CreateLogOnViewModel();
激活肽(vm);
}
公共void ShowMessenger(帐户)
{
ActiveItem.Deactivate(true);
var vm=IoC.Get();
//var vm=_viewModelControler.CreateMessengerViewModel();
vm.Account=Account;
激活肽(vm);
}
}
问题出在哪里?在MEF boostraper课程中?我使用clasic MEF boostrape:
感谢您的建议、时间和帮助。您仍然需要导出要导出的类。使用ExportFactory可以创建多个实例,但如果要创建实例的对象没有“导出”属性,则无法使用该属性。您好,Plaisted先生,谢谢您的解释。我有一个问题,它可能在chatWindow对象上调用Dispose方法。对象是使用ExportFactory创建的:var chatScreen=ViewModelControler.CreatChatViewModel();
[Export(typeof(IShellViewModel))]
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel
{
protected override void OnInitialize()
{
ShowLogOn();
base.OnInitialize();
}
public void ShowLogOn()
{
var vm = IoC.Get<ILogOnViewModel>();
//var vm = _viewModelControler.CreateLogOnViewModel();
ActivateItem(vm);
}
public void ShowMessenger(Account account)
{
ActiveItem.Deactivate(true);
var vm = IoC.Get<IMessengerViewModel>();
//var vm = _viewModelControler.CreateMessengerViewModel();
vm.Account = account;
ActivateItem(vm);
}
}