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