使用AutoFac BootStrapper?

时间:2012-08-25 19:24:29

标签: silverlight xaml autofac

我正在尝试使用StructureMap将IOC的WPF示例转换为使用AutoFac

的Silverlight

这被证明是非常困难的

我已经定义了一个静态的BootStrapper类

public class BootStrapper
{
  public static IContainer BaseContainer { get; private set; }

  public static FlexContractStructureViewModel FlexContractStructureViewModel()
  {
      return BaseContainer.Resolve<FlexContractStructureViewModel>();
  }

  public static void Build()
  {
      if (BaseContainer == null)
      {
          var builder = new ContainerBuilder();
          builder.RegisterAssemblyTypes();

          BaseContainer = builder.Build();
      }
  }

  static BootStrapper()
  {

  }

} 

这是在App.xaml.cs的Application_Startup中初始化的

private void Application_Startup(object sender, StartupEventArgs e)
{
  BootStrapper.Build();

  this.RootVisual = new MainPage();
}

我已将其中一个视图的DataContext设置为使用我的BootStrapper

DataContext="{Binding Path=FlexContractStructureViewModel, 
              Source={StaticResource classes:BootStrapper}}"          

但是我收到错误找不到名称/密钥类的资源:BootStrapper

我使用的书声明要对App.xaml进行更改以进行添加     

但我不能这样做,因为无法识别ObjectDataProvider

我已经尝试了下面的等价物而没有运气

<bs:BootStrapper xmlns:bs="clr-namespace:SLDashboard2.Classes" x:Key="BootStrapper"/>

我认为这可能与BootStrapper静态有关?但我不想不断创建新的容器

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

错误。您不应该在IoC中注册所有ViewModel吗?然后你将它们注入你的构造函数。它们永远不应该是静态的,我通常不会在我的视图中使用静态资源作为我的datacontext