C# 如何将连接字符串注入外部程序集(项目)控制器?
我的Web API正在为一个控制器使用其他项目。服务很好。但我正在努力将连接字符串从主WebAPI项目注入到外部项目的控制器中 如何做到这一点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
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
。引用