在棱镜中找不到记录器服务

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 的,以及你如何实施它来解决它