在棱镜中找不到记录器服务
Logger service not found in prism
我的设置是:
<PackageReference Include="Prism.DryIoc.Extensions" Version="7.2.0.1054" />
<PackageReference Include="Prism.Forms.Extended" Version="7.2.0.1054" />
<PackageReference Include="Shiny.Prism" Version="7.2.0.1054" />
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterServices(services =>
{
services.AddLogging();
}
}
当我尝试将服务分配给 属性 时,如下所示:
` Logger = provider.GetRequiredService<ILogger<AgentBase>>(); `
发生此错误:
`No service for type 'Microsoft.Extensions.Logging.ILogger`1[Hyperledger.Aries.Agents.AgentBase]' has been registered.`
是否缺少任何配置?
在我的项目中,Dryioc 是 prism 用于 Di 的主要容器,但我的对象完全依赖于 Microsoft DI,还有一些 class 必须从内部访问修饰符注册。
prism 团队不推荐用 Microsoft Di 替换 DryIOC,但有一个用于合并的扩展。
最终在将它们结合起来并更改内部 class 注册的 dryioc 设置后,终于成功了。
Host Builder 正确初始化后错误也已解决。
谢谢
@habib 不确定主机生成器是如何导致此错误的,因为根据错误记录器未得到解决。当你使用 Shiny.Prism 时,你可以使用 ShinyStartup 来注册 ILogger。您可以使用以下方式将 Logger 注册为开放通用:
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
或者,如果您需要更多地控制 ILogger 的解析方式,您可以使用 Prism 容器扩展中的委托注册 Delegate Registration
P.S 你能分享一下这是如何链接到 Host Builder 的,以及你如何实施它来解决它
我的设置是:
<PackageReference Include="Prism.DryIoc.Extensions" Version="7.2.0.1054" />
<PackageReference Include="Prism.Forms.Extended" Version="7.2.0.1054" />
<PackageReference Include="Shiny.Prism" Version="7.2.0.1054" />
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterServices(services =>
{
services.AddLogging();
}
}
当我尝试将服务分配给 属性 时,如下所示:
` Logger = provider.GetRequiredService<ILogger<AgentBase>>(); `
发生此错误:
`No service for type 'Microsoft.Extensions.Logging.ILogger`1[Hyperledger.Aries.Agents.AgentBase]' has been registered.`
是否缺少任何配置?
在我的项目中,Dryioc 是 prism 用于 Di 的主要容器,但我的对象完全依赖于 Microsoft DI,还有一些 class 必须从内部访问修饰符注册。
prism 团队不推荐用 Microsoft Di 替换 DryIOC,但有一个用于合并的扩展。
最终在将它们结合起来并更改内部 class 注册的 dryioc 设置后,终于成功了。
Host Builder 正确初始化后错误也已解决。
谢谢
@habib 不确定主机生成器是如何导致此错误的,因为根据错误记录器未得到解决。当你使用 Shiny.Prism 时,你可以使用 ShinyStartup 来注册 ILogger。您可以使用以下方式将 Logger 注册为开放通用:
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
或者,如果您需要更多地控制 ILogger 的解析方式,您可以使用 Prism 容器扩展中的委托注册 Delegate Registration
P.S 你能分享一下这是如何链接到 Host Builder 的,以及你如何实施它来解决它