J'essaie d'utiliser la classe générique Lazy pour instancier une classe coûteuse avec l'extension d'injection de dépendance de base .net. J'ai enregistré le type IRepo, mais je ne sais pas à quoi ressemblerait l'enregistrement de la classe Lazy ou s'il est même pris en charge. Comme solution de contournement, j'ai utilisé cette méthode http://mark-dot-net.blogspot.com/2009/08/lazy-loading-of-dependencies-in-unity.html
config:
public void ConfigureService(IServiceCollection services)
{
services.AddTransient<IRepo, Repo>();
//register lazy
}
manette:
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());
}
}
Les services qui doivent être récupérés dans Lazy seront réintroduits par le méthode d'enregistrement d'usine avec le nouveau Lazy du type de service prévu et fournis pour son implémentation en utilisant serviceProvider.GetRequiredService.
services.AddTransient<IRepo, Repo>()
.AddTransient(serviceProvider => new Lazy<IRepo>(() => serviceProvider.GetRequiredService<IRepo>()));