web-dev-qa-db-fra.com

Est-ce que l'injection de dépendances de base .net prend en charge Lazy <T>

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());
    }
}
28
ATerry

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>()));
0
Reza Jenabi