我在使用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相关
任何帮助将不胜感激 感谢
答案 0 :(得分:3)
您的问题实际上与SimpleInjector无关。问题是您将程序集命名为SimpleInjector
。
因此,当程序生成时,它将创建一个SimpleInjector.exe文件。这是因为simpleinjector是一个类库,因此命名为.dll。
但是当Caliburn搜索视图时,它会在程序集SimpleInjector
中搜索名称空间SimpleInjector
。但它有两个(.dll和.exe),并将在SimpleInjector.dll中搜索此视图,它将找不到它!有你的例外。
只需将程序集输出文件重命名为SimpleInjector.TestApp或其他东西。您可能知道这一点,但要完成:您可以在标签页应用程序,字段程序集名称
上更改项目属性