【发布时间】:2018-10-11 15:37:47
【问题描述】:
我有这个服务将被注入到其他一些控制器。
它需要一个服务,以及一个从配置文件中获取的连接字符串。
public class MyService : IMyService
{
public MyService(IService1 service1, IService2 service2, string connectionString){
//...
}
}
我希望注入 IService1 和 IService2,但要手动指定 connectionString。我无法解决这个问题,我看到的例子要么非常复杂,要么不是我想要实现的。
public void ConfigureServices(IServiceCollection services)
{
var cfg = new MyConfiguration();
Configuration.Bind("config", cfg);
var connectionString = cfg["myConnectionString"];
services.AddSingleton<IMyService, MyService>(/*what can I do here?*/)
}
这可以简单实现吗?
【问题讨论】:
-
我通常只注册配置对象,这样我就可以将它注入到任何需要它的构造函数中。
-
这确实是一个解决方案,但我很确定会有办法实现这个特定的事情
-
@Karl-JohanSjögren 虽然这可行,但了解框架的人倾向于建议不要将
IConfiguration直接注入到类中。 -
可能是这样,我倾向于将其封装在我自己的配置对象中,例如 IDatabaseConfiguration 和 ISmtpConfiguration 以避免让其他实现知道配置键。
-
哪个好。框架中还内置了
IOptions<T>模式。参考Options pattern in ASP.NET Core
标签: c# asp.net-core dependency-injection asp.net-core-mvc