【发布时间】:2021-10-13 09:38:42
【问题描述】:
我想将IServiceProvider(可能还有其他一些服务)注入到一个服务和/或一个其构造函数采用其他不可注入参数的自定义类中。
以下是我的服务/类的示例:
public class MyService {
IServiceProvider _sProvider;
/*possibly other injectable services*/
public MyService(object someCustomStuff, IServiceProvider sProvider) {
// --- keep reference for later use in methods...
_sProvider = sProvider;
}
}
请注意,如果我能够访问IServiceProvider,然后我可以使用_sProvider.GetService(typeof(MyRequiredService)) 即时检索我需要的任何服务,因此我不必在此处注入其他服务。
不过,我的要求是在这里以某种方式使用注入。
对于在Startup.ConfigureServices 中注册的服务。默认services.AddSingleton<MyService>() 会引发错误,因为注入无法将第一个someCustomStuff 参数作为服务检索(我不希望它成为一个!)。我实际上尝试了使用构造函数显式注册服务的替代方法:
services.AddSingleton(new MyService(myCustomStuff, _?IServiceProvider?_));
但我不知道如何在Startup.ConfigureServices 中显式访问IServiceProvider...
这自然会引出一个关于非组件类和Startup.ConfigureServices以外的其他地方的构造函数注入的更普遍的问题:
-
是否有可能(如果可以的话)使用具有注入服务和不可注入参数的混合构造函数获得依赖注入?
-
是否有可能(如果是的话,如何)在我没有显式访问要注入的服务的代码中通过构造函数使用依赖注入(如果我这样做,例如在组件中,这是微不足道的,因为我可以很容易向组件注入所需的服务,然后显式地将它们转发给构造函数...)
【问题讨论】:
-
是的,我只是在阅读它...我会发布答案!谢谢;)
标签: dependency-injection blazor