.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 )); }
- 如何通过nuget包共享源代码,以便在.NET Core项目中使用
- 如何解决.net核心构建错误NETDSDK1061和警告MSB3277
- .NET Core 1.0中的System.Environment
- .NET Core 2.0 RSA PlatformNotSupportedException
- 在.NET Core中引用时,从程序集文件加载的类型不等于相同的类型
- 正确的方式来签署.net核心组件
- hosting.json有什么意义,因为appsettings.json就足够了
- 我应该如何将一个DbContext实例注入IHostedService?
- 如何添加通用dependency injection