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

时间:2018-06-01 16:12:58

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

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

如何实现这一目标?

public class MyExternalController : Controller
{
    private string _connStr;

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


    // actions here
}

1 个答案:

答案 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;
}