上一篇, 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倉庫執行個體,其他兩個倉庫執行個體此時并沒有用到,不會建立執行個體。