无法构建Caliburn Micro教程代码。没有'AssemblySource.Select'的定义

时间:2014-07-01 23:04:45

标签: c# wpf caliburn.micro

我正在尝试按照http://www.mindscapehq.com/blog/index.php/2012/2/1/caliburn-micro-part-4-the-event-aggregator/

上的教程开始使用Caliburn Micro

但是,教程中的代码会产生错误。在该页面上,提供了以下Bootstraper代码:

using Caliburn.Micro;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;

public class AppBootstrapper : Bootstrapper<AppViewModel>
{
  private CompositionContainer container;

  protected override void Configure()
  {
    container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));

    CompositionBatch batch = new CompositionBatch();

    batch.AddExportedValue<IWindowManager>(new WindowManager());
    batch.AddExportedValue<IEventAggregator>(new EventAggregator());
    batch.AddExportedValue(container);

    container.Compose(batch);
  }

  protected override object GetInstance(Type serviceType, string key)
  {
    string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key;
    var exports = container.GetExportedValues<object>(contract);

    if (exports.Count() > 0)
    {
      return exports.First();
    }

    throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
  }
}

我找不到名为Bootstrapper的类(通用或其他),但我已经能够扩展BootstrapperBase了。

但是,我在声明container的行上遇到了麻烦。 AssemblySource没有名为Select的方法。

那是什么给出的?这是版本2.0和1.0之间的区别吗?如果是这样,我可以遵循一些更新的学习资料吗?

1 个答案:

答案 0 :(得分:5)

1.5.2和2.0.0之间存在一些重大变化。其中大部分都在documentation中列出。虽然看起来缺少对Bootstrapper的更改。这应该很快修复。

您应该继承Bootstrapper<T>并添加类似

的方法,而不是继承Bootstrapper
protected override void OnStartup(object sender, StartupEventArgs e)
{
    DisplayRootViewFor<AppViewModel>();
}

到您的Bootstrapper。

缺少的方法选择是因为AssemblySource.InstanceIObservableCollectionSelect方法是LINQ扩展方法。添加System.Linq的使用将纠正该错误。