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仓库实例,其他两个仓库实例此时并没有用到,不会创建实例。

原文地址:https://www.cnblogs.com/qk2014/p/14302737.html