我们的项目中有一些服务,我们最近移植到了.NetCore 3.0。此外,由于StructureMap即将日落,我们删除了所有引用,并将迁移到Lamar,因为它是迁移到最快的。引导时,其中一个服务抛出"System.NullReferenceException:'Object reference not set to a object of an object‘“。当然,我重写了Lamar的注册表类。我在Lamar中找不到任何有用的诊断方法来查找错误的来源。请告诉我是否有人可以指导我如何捕获错误的来源,因为现在调用堆栈只提供Bootstrap init调用作为错误的来源。我们查找程序集名称中具有特定字符串的所有程序集,例如:"Project- name”
var container = new Container(x =>
x.Scan(y =>
{
// Scan all DLLs for Registries
y.AssembliesFromApplicationBaseDirectory(
assembly =>
{
if (assembly.FullName.Contains("Project-Name"))
{
return true;
}
return false;
});
y.LookForRegistries();
}));
发布于 2019-10-30 16:44:25
我不知道这是否是正确的方式,但我想回答我自己的问题,以标记为关闭。我必须一个接一个地构建我的项目,一个接一个地注册,以找到导致问题的项目。
只是想添加更多的信息,以防对某人有帮助。"container.AssertConfigurationIsValid()“只有在容器初始化成功的情况下才有用。对我来说,Container init本身正在崩溃。所以断言一点用处都没有。
但是如果容器被初始化但IoC调用失败,或者出现"XYZInterface没有在这个容器中注册,并且不能被任何缺少的系列策略自动发现“这样的错误,可以通过在容器运行时值上设置监视并检查ErrorMessages属性是否具有值来识别这些错误。这将使您更深入地了解是什么实际破坏了服务初始化。在“即时”窗口中,可以检查每个实例的ErrorMessage值。
例如:要检查列表中第一个实例的错误消息值,请检查
((Lamar.InstanceRef[])((Lamar.QueryModel)container.Model).AllInstances)[0].Instance.ErrorMessages.
这将有助于识别其他突破性问题。
https://stackoverflow.com/questions/58588986
复制相似问题