Unity容器 - 懒惰注射

时间:2016-03-23 16:10:16

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

让我说我有一个clas

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容器实现它?

1 个答案:

答案 0 :(得分:5)

您在寻找Deferring the Resolution of Objects吗?

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