gpt4 book ai didi

c# - .net core依赖注入(inject)是否支持Lazy

转载 作者:可可西里 更新时间:2023-11-01 03:04:19 25 4
gpt4 key购买 nike

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

配置:

public void ConfigureService(IServiceCollection services)
{
services.AddTransient<IRepo, Repo>();
//register lazy
}

Controller :

public class ValuesController : Controller 
{
private Lazy<IRepo> _repo;

public ValuesController (Lazy<IRepo> repo)
{
_repo = repo;
}

[HttpGet()]
public IActionResult Get()
{
//Do something cheap
if(something)
return Ok(something);
else
return Ok(repo.Value.Get());
}
}

最佳答案

这是另一种支持 Lazy<T> 通用注册的方法这样任何类型都可以延迟解析。

services.AddTransient(typeof(Lazy<>), typeof(Lazier<>));

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

关于c# - .net core依赖注入(inject)是否支持Lazy<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com