控制器相關中:HttpContext來獲取實例
HttpContext下有一個RequestedService同樣可以用來獲取實例對象
IUserDAL userDAL = HttpContext.RequestServices.GetService(typeof(IUserDAL)) as IUserDAL;
方法二:使用靜態類來獲取依賴注入對象
新增加一個類(注意不是內部類不然都不好直接獲取了):
public static class ServiceLocator { public static IServiceProvider Instance { get; set; } }
然後在Configure中去賦值一下即可:
使用的時候就可以直接用了
ConfigureServices中
有時間我們可以會做一點初始化的操作,需要在這裏獲取
var provider = services.BuildServiceProvider(); IArticleDAL userDAL = provider.GetService<IArticleDAL>();
注意:如果這裏你用了ef,並且ef用了依賴注入獲取,在ConfigureServices中獲取時需要放到ef配置下面
Configure中
IArticleDAL articleDAL = app.ApplicationServices.GetService(typeof(IArticleDAL)) as IArticleDAL;
注意如果你需要獲取的對象裏邊依賴的對象使用了Scope方式注入這樣獲取會報錯:
Cannot resolve 'XX.IArticleDAL' from root provider because it requires scoped service 'XX.CNBLOGContext'.
需要這樣獲取
//手動獲取依賴注入對象 IServiceScope serviceScope = app.ApplicationServices.CreateScope(); IArticleDAL articleDAL2 = serviceScope.ServiceProvider.GetService<IArticleDAL>();
View頁面中:
view頁面中也可以使用@context拿到httpconext對象
@Context.RequestServices.GetService(typeof(TNBLOG.Main.DAL.Interface.IBlogSetDAL))
當然在view中最好使用@inject
這樣就比較方便了