.net核心dependency injection是否支持Lazy

我试图使用通用的Lazy类来实例化.net核心dependency injection扩展的昂贵类。 我已经注册了IRepo类型,但我不确定Lazy类的注册是什么样的,或者它是否支持。 作为一种解决方法,我使用了这种方法http://mark-dot-net.blogspot.com/2009/08/lazy-loading-of-dependencies-in-unity.html

配置:

public void ConfigureService(IServiceCollection services) { services.AddTransient(); //register lazy } 

控制器:

 public class ValuesController : Controller { private Lazy _repo; public ValuesController (Lazy repo) { _repo = repo; } [HttpGet()] public IActionResult Get() { //Do something cheap if(something) return Ok(something); else return Ok(repo.Value.Get()); } } 

这是另一种支持Lazy通用注册的方法,以便可以懒惰地解析任何类型。

 services.AddTransient(typeof(Lazy<>), typeof(Lazier<>)); internal class Lazier : Lazy where T : class { public Lazier(IServiceProvider provider) : base(() => provider.GetRequiredService()) { } } 

您只需要为创建Lazy对象的工厂方法添加注册。

 public void ConfigureService(IServiceCollection services) { services.AddTransient(); services.AddTransient>(provider => new Lazy(provider.GetService)); }