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