1、在控制器:通过HttpContext来获取(反正你能拿到HttpContext,用它没问题,我这里是通过Attribute拦截拿到的)
IOptions<ApiConfig> options = HttpContext.RequestServices.GetService(typeof(IOptions<ApiConfig>)) as IOptions<ApiConfig>; ApiConfig config= options.Value;
2、在ConfigureService:如果你这里使用了EF并且EF用的是DI获取的,在这里获取的时候,需要在EF的配置下面。
var provider = services.BuildServiceProvider(); IOptions<ApiConfig> userDAL = provider.GetService<IOptions<ApiConfig>>();
3、在Configure中
IArticleDAL articleDAL = app.ApplicationServices.GetService(typeof(IArticleDAL)) as IArticleDAL;
但是,如果对象使用的是Scope方式注入的,那么就会报错
Cannot resolve 'XXX.IArticleDAL' from root provider because it requires scoped service 'XXX.CNBLOGContext'.
需要进行CreateScope
//手动获取依赖注入对象 IServiceScope serviceScope = app.ApplicationServices.CreateScope();IArticleDAL articleDAL2 = serviceScope.ServiceProvider.GetService<IArticleDAL>();
4、View页面中:可以通过@Context来拿到HttpContext对象,后面和第一个一样了
@Context.RequestServices.GetService(typeof(XXX.Main.DAL.IBlogSetDAL))
最后附上我自己的一个示例,在ActionFilterAttribute拦截中拿到依赖注入的对象
public override void OnActionExecuting(ActionExecutingContext context) { //base.OnResultExecuting(context); IOptions<ApiConfig> options = context.HttpContext.RequestServices.GetService(typeof(IOptions<ApiConfig>)) as IOptions<ApiConfig>; ApiConfig config= options.Value; }
微信扫码查看本文
发表评论