我的设置是:
<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.`
是否缺少任何配置?
答案 0 :(得分:0)
在我的项目中,Dryioc是棱镜用于Di的主要容器,但我的对象完全依赖于Microsoft DI,因此某些类也必须从内部访问修饰符进行注册。
棱镜小组不建议用Microsoft Di替代DryIOC,但是可以扩展组合。
最后,将它们组合在一起,并对内部类注册的dryioc设置进行一些更改后,它开始起作用。
Host Builder正确初始化后,错误也得到解决。
谢谢
答案 1 :(得分:0)
@habib 不确定主机生成器是如何导致此错误的,因为根据错误记录器未得到解决。当您使用 Shiny.Prism 时,您可以使用 ShinyStartup 来注册 ILogger。您可以使用以下方法将 Logger 注册为开放通用:
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
或者,如果您需要更多地控制 ILogger 的解析方式,您可以使用 Prism 容器扩展中的委托注册 Delegate Registration
P.S 你能分享一下这是如何链接到 Host Builder 的,以及你的实现来解决它