【发布时间】:2021-02-14 07:51:19
【问题描述】:
是否可以获得服务类型的注册实现的类型?
例如:
在我的Startup.ConfigureServices 中,我注册了一个这样的服务(没什么特别的):
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddTransient<IBaseRepository, BaseRepository>();
//...
}
IBaseRepository 是服务类型,BaseRepository 是具体实现。
问题
有没有办法获取服务接口注册的type(不是实例)?
在我的示例中,我想询问 IBaseRepository 并获取类型 BaseRepository。
在 2021 年 2 月 10 日 13:13 UTC 编辑:以下信息不是问题的一部分,具有误导性。
我的问题的更多背景
稍后我需要这个服务的一个实例,并希望使用它来创建它
ActivatorUtilities.CreateInstance,因为我需要在仅在运行时知道的构造函数中传递值。
在这里,我需要为要获取新实例的类传递具体类型。
如果我可以将接口类型传递给我的方法,确定为该接口注册了哪个类并创建一个新实例,那就太好了。
【问题讨论】:
-
这似乎是XY problem。根据背景故事,当前状态的问题也不完整,因此不清楚。阅读How to Ask,然后编辑问题以提供可用于重现问题的minimal reproducible example,从而更好地了解实际询问的内容。
-
如果您有
IServiceCollection(不是内置的IServiceProvider),您可以使用LINQ方法对其进行操作并找到descriptor.ServiceType==X的注册(复数!)并选择descriptor.ImplementationType,但如果有任何在工厂或预制实例中注册,您就会遇到问题。但我还是不知道为什么你会想要这个 -
@pinkfloydx33:谢谢。这就是我一直在寻找的。我花了几个小时尝试并寻找一种从构建
IServiceProvider中获取信息的方法。并感谢工厂的提示。帮助我关注它。 @Nkosi:我的问题只是:是否可以获得服务类型的注册实现的类型?。您认为如果我不添加“我的问题的更多背景信息”部分会更清楚吗? -
@BooFar 是的,背景添加了额外的细节,将问题扩大到稀释了您实际寻找的内容的程度。
标签: c# .net-core dependency-injection