【发布时间】:2015-04-08 19:18:59
【问题描述】:
我不确定如何连接 Caliburn.Micro 以使用 MEF2 的 PCL 版本。我见过MefBootstrapper example,但它使用了很多不可用的类,而且我在转换到新的 API 时遇到了麻烦。
这是我目前所拥有的:
using System;
using System.Collections.Generic;
using System.Composition;
using System.Composition.Hosting;
using System.Linq;
using Caliburn.Micro;
namespace Test
{
public class Bootstrapper : BootstrapperBase
{
private CompositionHost _host;
public Bootstrapper()
{
Initialize();
}
protected override void Configure()
{
var config = new ContainerConfiguration();
config.WithAssemblies(AssemblySource.Instance);
// batch.AddExportedValue<IWindowManager>(new WindowManager());
// batch.AddExportedValue<IEventAggregator>(new EventAggregator());
// batch.AddExportedValue(container);
_host = config.CreateContainer();
}
protected override object GetInstance(Type serviceType, string key)
{
string contract = string.IsNullOrEmpty(key) ? serviceType.ToString() : key;
var exports = _host.GetExports<object>(contract).ToArray();
if (exports.Any())
return exports.First();
throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
}
protected override IEnumerable<object> GetAllInstances(Type serviceType)
{
return _host.GetExports<object>(serviceType.ToString());
}
protected override void BuildUp(object instance)
{
_host.SatisfyImports(instance);
}
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
DisplayRootViewFor<IShell>();
}
}
}
但是,CompositionHost 似乎没有任何导出,我不知道如何向其中添加对象(WindowManager 和 EventAggregator)。
【问题讨论】:
标签: c# .net mef caliburn.micro portable-class-library