我有一个不是Blazor组件的后台类,我想使用内置的记录器(ILogger(服务。
我不能在属性上使用"[IInject]"(因为它不是组件(,也不能使用支持的构造函数注入,因为构造函数有其他参数(即,不仅仅是单个ILogger参数(。我一直在寻找类似"Application.GetService"(类似于我使用的其他IOC实现(的东西,我可以在构造函数中使用,但找不到任何东西。
有什么想法吗?
看起来您需要为服务注册默认值。您可以在Startup.cs
和ConfigureServices
中执行类似于services.AddTransient(<your service>)
的操作。
如果你想在运行时获得服务,你可以用它的.GetService<>()
方法注入IServiceProvider
,或者如果你想不使用DI调用它,你可以创建一个单例,在应用程序启动时注册。singleton将有一个服务提供商的属性,然后您可以从您想要的任何服务调用该属性(尽管我建议不要这样做,而是使用DI(
还可以通过适配器将MSDI与其他DI容器组合在一起。看来您的服务已经有了DI解决方案,如果是这样的话,这可能是最好的解决方案。在CreateHostBuilder()
设置方法中,从.UseServiceProviderFactory()
开始使用不同的容器。您需要通过为您的容器找到正确的适配器