2016-09-13 251 views
1

我试图找到我如何使用依赖注入来注入的ConnectionString或自定义AppSetting对象到目前为止使用我结束了在启动依赖注入

services.Configure<IConnectionStrings>(Configuration.GetSection("MyConnection")); 

例如层

  • 的Web MVC应用程序
  • 业务逻辑(类库)
  • 库(类库)
  • DAL(类库)
  • 模型(类库)

其中网看到的只是业务逻辑等方面,对模型可用于所有。

在DAL项目中,我有一个对象负责连接和运行对我的数据库(CDbTools对象)的查询。

现在,我怎样才能直接注入CDbTools,而无需从控制器下降到DAL。

谢谢。

+0

请提供[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

回答

0

我相信你应该添加到您的ConfigureServices方法:

services.Configure<CustomSettings>(settings => 
{ 
    Configuration.GetSection("CustomSettings").Bind(settings); 
}); 

在哪里服务,是您IServiceCollection对象,CustomSettings是要注入您的自定义配置类。该自定义对象应映射到您的设置字段。

希望这会有所帮助!

+0

这是如何照顾将它传递给我的自定义对象?因为我在Ctor中添加它不会编译,因为我需要将它从控制器一直传递到DAL – Normand

+0

如果我了解您的问题,那么您会将可注入对象添加到控制器的构造函数中。这就是依赖注入的工作原理。 此链接可能有更多帮助: https://docs.asp.net/en/latest/fundamentals/configuration.html – JohnW

1

依赖注入绝对需要一点习惯,而且你不会像你习惯的那样创建对象。你想要做的是首先修改你的CDbTools来接受注入的字符串。

public CDbTools(IConnectionStrings strings) 
{ 
    _connectionString = strings 
} 

下一步将实际将CDbTools注入到需要它的类中。首先,在启动时注册它。

services.AddScoped<CDbTools>(); 

你需要关注这个链条。不要把它看作是从顶层向下传递对象 - 这会混淆你对问题的分离。每层都有注入的下层。这不仅会让你注入你正在寻找的字符串。它可以让你嘲笑事情变得更容易,更容易交换图层,以及其他好处。