Unity 容器 - 延迟注入

问题描述 投票:0回答:1

假设我有课:

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 和任何其他需要配置的接口的惰性实现。

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

c# .net dependency-injection lazy-loading unity-container
1个回答
7
投票

您是否在寻找推迟对象的解析

class Foo : FooBase {
  Lazy<IDbRepository> _db;
  public Foo(Settings settings, Lazy<IDbRepository> db)
    : base(settings) {
    _db = db;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.