英文:
WPF Caliburn Micro Bootstrapper not found instance from another project
问题
Caliburn.Micro 版本 4.0.212。
项目版本 .NET6
使用 Caliburn.Micro 3.0 和 .Net Framework 4.7.2 时可以工作。
当我尝试打开位于另一个项目中的简单 viewModel 时,我遇到了一个错误:"该组件没有通过 URI 标识的资源"。
我使用了 Caliburn Micro 的示例:https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/tutorals/WPF/Wpf.Tutorial
为了重现这个错误,我在解决方案中创建了另一个项目:"CommonView"。
我将 AboutViewModel 从主项目移动到这个项目中,如下图所示:
在启动引导程序中,我需要修改 SelectAssemblies 方法,以添加来自这个新项目的文件。
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = new List<Assembly>();
assemblies.AddRange(base.SelectAssemblies());
string[] fileEntries = Directory.GetFiles(Directory.GetCurrentDirectory());
foreach (string fileName in fileEntries)
{
if (!fileName.Contains(".conf") && fileName.Contains("CommonView.dll"))
{
assemblies.Add(Assembly.LoadFile(fileName));
}
}
return assemblies;
}
现在,当我从按钮调用 About 类时,Caliburn 尝试获取实例,但找不到,所以我会得到错误。
protected override object GetInstance(Type service, string key)
{
var instance = _container.GetInstance(service, key);
//instance is null
return instance;
}
然而,如果我在调用 CategoryViewModel 时进行调试,它会正确返回实例。
我看到了这篇帖子,Juan Carlos 在其中重写了 InitializeComponent(),但我认为应该有一个更简单的方法:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri
提前感谢您的帮助。
祝好!
英文:
Caliburn.Micro version 4.0.212.
Projects version .NET6
With Caliburn.Micro 3.0 and .Net Framework 4.7.2 it works
I am getting an error when I try to open a simple viewModel located in another project: "The component does not have a resource identified by the URI"
I am using the Caliburn Micro example: https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/tutorals/WPF/Wpf.Tutorial
To reproduce the error I created another project to the solution: "CommonView"
I moved AboutViewModel from the main project to this one as I show in the image below:
In the bootstrapper I need to modify the SelectAssemblies method to add the files from this new project
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = new List<Assembly>();
assemblies.AddRange(base.SelectAssemblies());
string[] fileEntries = Directory.GetFiles(Directory.GetCurrentDirectory());
foreach (string fileName in fileEntries)
{
if (!fileName.Contains(".conf") && fileName.Contains("CommonView.dll"))
{
assemblies.Add(Assembly.LoadFile(fileName));
}
}
return assemblies;
}
Now, when I call the About class from the button, Caliburn tries to get the instance, but it is not found so I get the error.
protected override object GetInstance(Type service, string key)
{
var instance = _container.GetInstance(service, key);
//instance is null
return instance;
}
However if I debug when CategoryViewModel is called, it returns the instance correctly
I saw this post where Juan Carlos overrides InitializeComponent(), but I think It should have a easier aproachment: https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri
Thank you in advance.
Regards
答案1
得分: 0
问题出在程序集的加载上,应该像这样加载:
assemblies.Add(Assembly.LoadFrom(fileName));
https://learn.microsoft.com/en-us/archive/blogs/suzcook/loadfile-vs-loadfrom
长命百岁,繁荣昌盛。
英文:
The problem is in the loading of the assembly, which should be like this
assemblies.Add(Assembly.LoadFrom(fileName));
https://learn.microsoft.com/en-us/archive/blogs/suzcook/loadfile-vs-loadfrom
Live long and prosper
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论