我的Web API正在为一个控制器使用其他项目。服务很好。但我正在努力将主Web API项目中的连接字符串注入外部项目中的控制器。
如何实现这一目标?
public class MyExternalController : Controller
{
private string _connStr;
public MyExternalController(string connStr)
{
_connStr = connStr;
}
// actions here
}
答案 0 :(得分:3)
正如其他人在评论中所说,对于像控制器这样的东西,你应该注入像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"));
当然,这会与某些配置相对应,如:
{
"Foo": {
"Bar": "Baz"
}
}
然后,在您的控制器中,例如:
public MyExternalController(IOptionsSnapshot<FooConfig> fooConfig)
{
_fooConfig = fooConfig.Value;
}