【问题标题】:is there anyway to use ServiceProvider.GetService() with reflection in .net core?无论如何在.net核心中使用带有反射的ServiceProvider.GetService()?
【发布时间】:2020-04-14 13:44:32
【问题描述】:

这是我的课。

public class DemoJob : IJob
{
    private readonly ILogger logger;
    public DemoJob(ILogger<SecondJob> logger)
    {
        this.logger = logger;
    }

    public async Task Execute(IJobExecutionContext context)
    {
        await Task.Run(() =>
        {
            Console.WriteLine(context.JobDetail.JobType.FullName);
            logger.LogError(context.JobDetail.JobType.FullName);
        });
    }
}

我想获得一个类的依赖注入的所有服务。 我可以像这样使用

var service = serviceProvider.GetService(typeof(DemoJob))

看起来还不错。 但现在我想用反射来使用它,比如

var jobType = assembly.GetType("xxxx.SecondJob")
var service = serviceProvider.GetService(jobType)

service 总是返回一个空值。 反正有吗?

【问题讨论】:

  • 在最后一个代码sn-p中,我想你的意思是serviceProvider.GetService(jobType);?
  • @KevinGosse 是的,我的错,让我编辑一下。
  • 显示您如何注册SecondJob
  • @mtkachenko services.AddSingleton&lt;SecondJob&gt;(); 在 Startup.cs 中
  • @KevinGosse 使用 var jobType = Type.GetType($"xxx.DemoJob, {assembly.FullName}"); 解决了我的问题,谢谢凯文。^o^

标签: c# .net asp.net-core dependency-injection


【解决方案1】:

在这种情况下,您可以使用 Type.GetType() 代替 someType.GetType()。帮我解决了问题。感谢@KevinGosse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2019-04-02
    • 2019-05-21
    • 2018-10-30
    • 2020-05-04
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多