Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将连接字符串注入外部程序集(项目)控制器?_C#_Asp.net Core_Dependency Injection - Fatal编程技术网

C# 如何将连接字符串注入外部程序集(项目)控制器?

C# 如何将连接字符串注入外部程序集(项目)控制器?,c#,asp.net-core,dependency-injection,C#,Asp.net Core,Dependency Injection,我的Web API正在为一个控制器使用其他项目。服务很好。但我正在努力将连接字符串从主WebAPI项目注入到外部项目的控制器中 如何做到这一点 public class MyExternalController : Controller { private string _connStr; public MyExternalController(string connStr) { _connStr = connStr; } // ac

我的Web API正在为一个控制器使用其他项目。服务很好。但我正在努力将连接字符串从主WebAPI项目注入到外部项目的控制器中

如何做到这一点

public class MyExternalController : Controller
{
    private string _connStr;

    public MyExternalController(string connStr)
    {
        _connStr = connStr;
    }


    // actions here
}

正如其他人在评论中所说,对于控制器之类的东西,应该注入具体的东西,比如
DbContext
,而不是连接字符串。然而,为了将来的参考,这里的问题是注入一个字符串。没有办法在DI容器中注册一些东西来满足这样的依赖关系。相反,应该注入配置或强类型配置类

注入
IConfigurationRoot
有点反模式,但对于连接字符串之类的东西,这没关系:

public MyExternalController(IConfigurationRoot config)
{
    _connStr = config.GetConnectionString("MyConnectionString");
}
但是,对于其他所有内容,您应该使用强类型配置类

public class FooConfig
{
    public string Bar { get; set; }
}
然后,在
ConfigureServices
中:

services.Configure<FooConfig>(Configuration.GetSection("Foo"));
然后,在控制器中,例如:

public MyExternalController(IOptionsSnapshot<FooConfig> fooConfig)
{
    _fooConfig = fooConfig.Value;
}
公共MyExternalController(IOptionsSnapshot fooConfig) { _fooConfig=fooConfig.Value; }
正如其他人在评论中所说,对于控制器之类的东西,应该注入具体的东西,比如
DbContext
,而不是连接字符串。然而,为了将来的参考,这里的问题是注入一个字符串。没有办法在DI容器中注册一些东西来满足这样的依赖关系。相反,应该注入配置或强类型配置类

注入
IConfigurationRoot
有点反模式,但对于连接字符串之类的东西,这没关系:

public MyExternalController(IConfigurationRoot config)
{
    _connStr = config.GetConnectionString("MyConnectionString");
}
但是,对于其他所有内容,您应该使用强类型配置类

public class FooConfig
{
    public string Bar { get; set; }
}
然后,在
ConfigureServices
中:

services.Configure<FooConfig>(Configuration.GetSection("Foo"));
然后,在控制器中,例如:

public MyExternalController(IOptionsSnapshot<FooConfig> fooConfig)
{
    _fooConfig = fooConfig.Value;
}
公共MyExternalController(IOptionsSnapshot fooConfig) { _fooConfig=fooConfig.Value; }
为什么要首先注入连接字符串?您不应该使用注入的依赖项内联构建依赖项,您应该注入已配置的服务。您只能注入已注册的服务。您应该注入一个
DbContext
。引用为什么要首先注入连接字符串?您不应该使用注入的依赖项内联构建依赖项,您应该注入已配置的服务。您只能注入已注册的服务。您应该注入一个
DbContext
。引用