【问题标题】:Dependency injection on child object子对象的依赖注入
【发布时间】:2023-04-09 19:31:01
【问题描述】:

我正在尝试找到如何使用依赖注入来注入 ConnectionString 或自定义 AppSetting 对象到目前为止,我最终在启动时使用

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

示例层

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

web 只能看到业务逻辑等,模型对所有人都可用。

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

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

谢谢。

【问题讨论】:

标签: asp.net-core asp.net-core-mvc .net-core asp.net-core-1.0


【解决方案1】:

依赖注入确实需要一点时间来适应,而且您不会像以前那样创建对象。您要做的是首先修改您的 CDbTools 以获取注入的字符串。

public CDbTools(IConnectionStrings strings)
{
    _connectionString = strings
}

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

services.AddScoped<CDbTools>();

您需要在整个链条中跟进。不要认为它是从顶层向下传递对象 - 这会扰乱您的关注点分离。每一层都注入了较低的层。这不仅能让你注入你正在寻找的字符串。它可以让你更轻松地模拟事物,更轻松地交换层,并带来许多其他好处。

【讨论】:

    【解决方案2】:

    我相信您应该将其添加到您的 ConfigureServices 方法中:

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

    其中 services 是您的 IServiceCollection 对象,而 CustomSettings 是您要注入的自定义配置类。该自定义对象应映射到您的设置字段。

    希望这会有所帮助!

    【讨论】:

    • 这是如何将其传递给我的自定义对象的?当我在 Ctor 中添加时,它不会编译,因为我需要将它从控制器一直传递到 DAL
    • 如果我理解您的问题,您可以将可注入对象添加到控制器的构造函数中。这就是依赖注入的工作原理。此链接可能会有所帮助:docs.asp.net/en/latest/fundamentals/configuration.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多