web-dev-qa-db-ja.com

.netコア依存関係注入はLazy <T>をサポートしますか

汎用のLazyクラスを使用して、.netコア依存性注入拡張機能を備えた高価なクラスをインスタンス化しようとしています。 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
}

コントローラ:

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

Lazyでフェッチされるサービスは、目的のサービスタイプのnew Lazyfactory registration methodによって再導入され、提供されますserviceProvider.GetRequiredServiceを使用した実装。

services.AddTransient<IRepo, Repo>()
        .AddTransient(serviceProvider => new Lazy<IRepo>(() => serviceProvider.GetRequiredService<IRepo>()));
0
Reza Jenabi