Simple Injector + Caliburn Micro 2.0,解析视图时出错

时间:2014-11-25 07:38:51

标签: wpf dependency-injection caliburn.micro simple-injector

我在使用SimpleInjector和Caliburn Micro 2.0时遇到了一个奇怪的问题....我得到了一个异常的说法

"Cannot locate resource 'views/simpleviewmodel.xaml'."} 

资源设置为

构建动作:页面

如果我将它设置为资源(丢失.cs),则会加载...

我的引导程序是

public class MefBootstrapper : BootstrapperBase
{
    public static readonly Container ContainerInstance = new Container();


    public MefBootstrapper()
    {
        Initialize();
    }

    protected override void Configure()
    {
        ContainerInstance.Register<IWindowManager, WindowManager>();
        ContainerInstance.RegisterSingle<IEventAggregator, EventAggregator>();

        ContainerInstance.Register<SimpleViewModel, SimpleViewModel>();

        ContainerInstance.Verify();
    }

    protected override object GetInstance(Type serviceType, string key)
    {

        return ContainerInstance.GetInstance(serviceType);
    }

    protected override IEnumerable<object> GetAllInstances(Type serviceType)
    {

        return ContainerInstance.GetAllInstances(serviceType);
    }

    protected override void BuildUp(object instance)
    {
        ContainerInstance.InjectProperties(instance);
    }

    protected override void OnStartup(object sender, StartupEventArgs e)
    {
        DisplayRootViewFor<SimpleViewModel>();
    }
}

SimpleViewModel非常简单

 public class SimpleViewModel : Screen
 {
 }

并且视图也很简单

<UserControl x:Class="SimpleInjector.Views.SimpleView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <TextBlock Text="IT works!" Foreground="Red"></TextBlock>    </Grid>
</UserControl>

uploaded一个项目来自己测试...如果在MefBoostrapper中你评论整个引导程序然后取消注释它工作的另一个...所以我认为这是一个问题与SimpleInjector相关

任何帮助将不胜感激 感谢

1 个答案:

答案 0 :(得分:3)

您的问题实际上与SimpleInjector无关。问题是您将程序集命名为SimpleInjector。 因此,当程序生成时,它将创建一个SimpleInjector.exe文件。这是因为simpleinjector是一个类库,因此命名为.dll。

但是当Caliburn搜索视图时,它会在程序集SimpleInjector中搜索名称空间SimpleInjector。但它有两个(.dll和.exe),并将在SimpleInjector.dll中搜索此视图,它将找不到它!有你的例外。

只需将程序集输出文件重命名为SimpleInjector.TestApp或其他东西。您可能知道这一点,但要完成:您可以在标签页应用程序,字段程序集名称

上更改项目属性