一、前言
在之前的文章【ASP.NET Core 整合Autofac和Castle實(shí)現(xiàn)自動(dòng)AOP攔截】中,我們講過(guò)除了ASP.NETCore自帶的IOC容器外,如何使用Autofac來(lái)接管IServiceProvider進(jìn)行依賴(lài)注入。
最近老有想法在ASP.NET Mvc Core中實(shí)現(xiàn)Controller的屬性值的依賴(lài)注入,但是找遍了Microsoft.Extensions.DependencyInjection類(lèi)庫(kù)也沒(méi)找到對(duì)應(yīng)的方法,而且查看源代碼之后發(fā)現(xiàn)其都是針對(duì)構(gòu)造器進(jìn)行依賴(lài)注入的,并沒(méi)有對(duì)屬性或字段進(jìn)行依賴(lài)注入。
官方給我們的兩種獲取依賴(lài)注入結(jié)果的方法:ActivatorUtilities.CreateInstance和IServiceProvider.GetService,這兩個(gè)方法的區(qū)別,這里我就不詳細(xì)闡述了,有興趣的朋友可以自己去查看一下這兩個(gè)類(lèi)的源代碼:ServiceProvider和ActivatorUtilities,但總得來(lái)說(shuō)兩個(gè)方法在創(chuàng)建對(duì)象時(shí)都沒(méi)有注入屬性值。
簡(jiǎn)單的調(diào)用這兩個(gè)方法:首先在Startup.ConfigureServices函數(shù)中,添加語(yǔ)句services.AddTransient<IUser, MyUser>();