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

时间:2019-01-16 13:42:52

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

我在测试方面没有丰富的经验,但是我正在为我创建的类设置Singleton实例注入。但是,我不知道如何调用该类,如果要调用,则需要构造函数。如果我创建一个额外的空构造函数,则依赖关系将显示为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();
 }

如何通过注入的配置调用连接器?我缺少任何依赖关系解决方案?我打错班了吗?

我希望有人可以给我一些启发。

1 个答案:

答案 0 :(得分:2)

使用DI容器的想法是,您不需要在方法中处理对象创建。您的HomeController也不需要知道Connector是否实际上是单身人士。

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

public class HomeController 
{ 
    private readonly Connector _connector;

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

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