.net core 在代码中的任何地方手动解析依赖项

Sex*_*yMF 8 dependency-injection .net-core

您知道如何手动解决.net core 中的依赖项吗?就像是

DependencyResolver.Resolve<ISomeService>()
Run Code Online (Sandbox Code Playgroud)

更新 我在一个没有注入的类中,我想从内部解决它,而不是到处传递变量

Muh*_*man 9

添加您的依赖项,ConfigureServices如下所示

public void ConfigureServices(IServiceCollection services){
    //AddSingleton or AddTransient based on your requirements
    services.AddTransient<ISomeService, ConcreteService>();
}
Run Code Online (Sandbox Code Playgroud)

在您的控制器或任何地方,添加IServiceProvider构造函数,如下所示:

using Microsoft.Extensions.DependencyInjection;

...

public class HomeController
{
  ...
  public HomeController(IServiceProvider serviceProvider)
  {
      var service = serviceProvider.GetService<ISomeService>();
  }
}
Run Code Online (Sandbox Code Playgroud)

@Shazam,以下是根据您的评论提供的一些注释或建议:

  • 如果由于此类中可能没有构造函数而无法注入,我建议向您的函数添加一个参数并从外部传递已解析的依赖项

  • 另一个想法是添加一个静态属性并初始化其值ConfigureServices

例如:

public static class MyClass
{
    public static ISomeService MyServiceObj { set; get; }
    ....
}
Run Code Online (Sandbox Code Playgroud)

在你的ConfigureServices

   public void ConfigureServices(IServiceCollection services){
        services.AddTransient<ISomeService, ConcreteService>();
        MyClass.MyServiceObj = services.GetService<ISomeService>();
    }
Run Code Online (Sandbox Code Playgroud)

希望这对您有所帮助,如果您仍然不确定如何操作,请评价我的答案或给我留言