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