C# 如何在自定义类构造函数中注入单例并使用它|.NET Core 2

C# 如何在自定义类构造函数中注入单例并使用它|.NET Core 2,c#,dependency-injection,.net-core,C#,Dependency Injection,.net Core,我在测试方面没有丰富的经验,但我正在为我创建的类设置一个单例实例注入。然而,我不知道该如何称呼这个类。如果我打电话,我需要构造函数。如果我创建一个额外的空构造函数,依赖项将显示为null 我花了几天时间在文档中查找它,但它只显示了如何注入的示例。我找不到以后如何实例化这个类 此外,我还看到了一些示例,但其中许多都使用MVC控制器,这些控制器由框架自动实例化 Connector.cs public class Connector { private IConfiguration _conf

我在测试方面没有丰富的经验,但我正在为我创建的类设置一个单例实例注入。然而,我不知道该如何称呼这个类。如果我打电话,我需要构造函数。如果我创建一个额外的空构造函数,依赖项将显示为null

我花了几天时间在文档中查找它,但它只显示了如何注入的示例。我找不到以后如何实例化这个类

此外,我还看到了一些示例,但其中许多都使用MVC控制器,这些控制器由框架自动实例化

Connector.cs
public class Connector
{
    private IConfiguration _configuration;
    public Connector(IConfiguration configuration) {
       _configuration = configuration;
    }

    public Connector() {
    } 

    public string DoSomething() {
      //return Something related to _configuration
    }
}

startup.cs
public void ConfigureServices(IServiceCollection services)
{    
    //Other default config

     services.AddSingleton(new Connector(Configuration));
 }

 HomeController.cs
 public IActionResult Index()
 {

        var x = (new Connector()).DoSomething(); //This will fail as _configuration is not injected
        return View();
 }
如何使用注入配置调用连接器?我是否缺少任何依赖项解析?我给班级打错电话了吗


我希望有人能对此有所了解。

DI容器的想法是,您不需要在方法中处理对象创建。您的
家庭控制器
也不需要知道
连接器
是否为单体

您只需将依赖项注入构造函数。
由于您已将其配置为单实例,因此DI容器每次都会将连接器解析为同一实例

public class HomeController 
{ 
    private readonly Connector _connector;

    public HomeController(Connector connector)
    {
        _connector = connector;
    }

    public IActionResult Index()
    {
        var x = _connector.DoSomething();
        // ...
    }

我明白了,所以没有办法将依赖项注入到自定义类中?@PaulArthurWeinberger你所说的自定义类是什么意思?:)例如:如果我想运行控制台应用程序并将连接器类注入助手类。@PaulArthurWeinberger您提供的代码是ASP.NET核心代码,它有自己的内置依赖项注入容器,它已经启用,您只需在
Startup
类的
ConfigureServices
中注册依赖项即可。如果您想运行控制台应用程序(不是ASP.NET核心应用程序)并使用DI,您必须自己创建、配置和使用DI容器。您可能可以使用ASP.NET核心中使用的相同DI容器(我不确定),也可以使用第三方工具,如NInject、Autofac、Unity等。