【问题标题】:Simple Injector + Caliburn Micro 2.0 , error in resolving the viewSimple Injector + Caliburn Micro 2.0 ,解决视图错误
【发布时间】:2014-11-25 07:38:51
【问题描述】:

我在 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 相关的问题

任何帮助将不胜感激 谢谢

【问题讨论】:

  • 请注意,从 Simple Injector 2.6 及更高版本开始,InjectPropertiesis deprecated。请阅读this q/a

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


【解决方案1】:

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

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

只需将您的程序集输出文件重命名为 SimpleInjector.TestApp 或其他名称。您可能知道这一点,但要完整:您可以在标签页应用程序的项目属性中更改它,字段程序集名称

【讨论】:

  • 感谢 Ric.Net ...我是一头牛:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多