天天看點

c# autofac構造函數中lazy延遲加載執行個體

上一篇, net core3.1版本在mvc、webapi和控制台程式中使用autofac ,講述了mvc或webapi的controller中構造方法注入。

但是,如果某個controller中有很多業務邏輯,就需要注入許多倉庫執行個體,有些action或許隻是用到其中一兩個倉庫執行個體而已,這樣就造成了資源浪費,影響加載速度等缺點。

但是可以通過lazy關鍵詞實作延遲加載,就是用到時再執行個體化。

構造方法注入代碼如下:

private readonly Lazy<IAdminDomRepository> adminDomRepository;
private readonly Lazy<IAdminMenuRepository> adminMenuRepository;
private readonly Lazy<IAdminRoleRepository> adminRoleRepository;
public AdminDomController(Lazy<IAdminDomRepository> _adminDomRepository
     , Lazy<IAdminMenuRepository> _adminMenuRepository
     , Lazy<IAdminRoleRepository> _adminRoleRepository)
{
      adminDomRepository = _adminDomRepository;
      adminMenuRepository = _adminMenuRepository;
      adminRoleRepository = _adminRoleRepository;
}      

action代碼如下(通過.Value擷取執行個體):

[HttpPost]
public async Task<IActionResult> DomListPost()
{
      ......
      var pageObj = await adminDomRepository.Value.GetPageListAsync(pageIndex, pageSize, dic);
     ......
}      

此時這個action隻用到了adminDomRepository倉庫執行個體,其他兩個倉庫執行個體此時并沒有用到,不會建立執行個體。