c# - Unity 容器 - 延迟注入(inject)

标签 c# .net dependency-injection lazy-loading unity-container

假设我有一个类(class)

class Foo : FooBase {

  public Foo(Settings settings, IDbRepository db)
    : base(settings) {
      this.db = db;
  }

  ...

}

基本上 FooBase 通过构造函数接收设置并从配置文件加载一些配置。

然后我有实现 IDbRepository 的 MySQLRepository 类

class MySQLRepository : IDbRepository {

  ...

  public MySQLRepository(IConfigurationRepository config) {
    conn = new MySQLConnection(config.GetConnectionString());
  }

  ...

}

在 Program.cs 中我有:

Foo foo = container.Resolve<Foo>();

问题在于 FooBase 的构造函数仅在加载所有其他依赖项后才会被调用。但在调用 FooBase 构造函数之前不会加载配置。

我的想法是创建 IDbRepository 和任何其他需要配置的接口(interface)的惰性实现。

这是个好主意吗? 如何使用 Unity 容器实现它?

最佳答案

您在寻找 Deferring the Resolution of Objects

class Foo : FooBase {
  Lazy<IDbRepository> _db;
  public Foo(Settings settings, Lazy<IDbRepository> db)
    : base(settings) {
    _db = db;
  }
}

关于c# - Unity 容器 - 延迟注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36183220/

相关文章:

c# - 日志解析器 - 通过 MSUtill 查询并通过 C# 代码读取记录

c# - 有没有比 DotNetZip 更快的 c# zip 库

.net - 您最喜欢的.NET业务逻辑层(BLL)开发工具包是什么?有没有?

c# - 无法加载项目文件,根级别的数据无效,项目中没有 XML

dependency-injection - JAX-WS & JSR 330 (Spring) - 不能注入(inject)依赖

c# - 使用原始参数构造函数注册类型?

dependency-injection - PHPStorm、Silex DI 索引代码完成

c# - 在多页上打印一封信

c# - 将list <int []>转换为byte []

c# - IQueryable 扩展 : create lambda expression for querying a column for a keyword