我一直在与Caliburn.Micro和MEF合作,我试图让viewmodelfactory实现正常工作。我尝试的是为对话框窗口创建一个ViewModel链(每个ViewModel实例化一个或多个视图模型以生成窗口的整体布局)。我无法正确导入viewmodelfactory;我可以使用[ImportingConstructor]
毫无问题地获取它,但是当我尝试使用[import]
时,我最终会对viewModelFactory发出一个空引用异常。
" ViewModelFactory"我实施的是:
http://blog.pglazkov.com/2011/04/mvvm-with-mef-viewmodelfactory.html
我尝试按以下方式导入viewmodel:
[Import]
public IViewModelFactory viewModelFactory { get; set; }
和IViewModelFactory本身已声明导出(并且与[ImportingConstructor]
一起正常工作[Export(typeof(IViewModelFactory))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class ViewModelFactory : IViewModelFactory
我接下来的努力是尝试将ViewModelFactory实例添加到合成容器中:
protected override void Configure()
{
var catalog =
new AggregateCatalog(
AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>());
container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddExportedValue<IWindowManager>(new WindowManager());
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
batch.AddExportedValue<IViewModelFactory>(new ViewModelFactory());
batch.AddExportedValue(container);
container.Compose(batch);
}
但是,这会导致ViewModelFactory中出现错误,说明加载了Lazy的合成容器为空。
我试图找到一个允许我仍然使用Factory方法的解决方案,因为它允许我使用当前作为我的viewmodel的一部分所需的构造函数参数。
我能够通过&#34;初始化&#34;来实现这一目标。我的viewmodels中的函数,在我的ViewModels上使用[ImportingConstructor],其构造函数只包含IViewModelFactory声明。但是,现在需要我实例化viewmodel并调用&#34; initialise&#34;无论何时我创造它们,所以更优雅的方法会很棒。
感谢。
答案 0 :(得分:0)
管理实现不同的解决方案,即使用:
IoC.Get<*ViewModelName*>();
仍然没有解决为什么[导入]本身并不起作用,但这确实解决了我的问题。