dotnet静态方法注入
1、
using Microsoft.Extensions.DependencyInjection; using System; namespace GWHomeReport.WebApi.Util { public class AppDependencyResolver { private static AppDependencyResolver _resolver; public static AppDependencyResolver Current { get { if (_resolver == null) throw new Exception("AppDependencyResolver not initialized"); return _resolver; } } public static void Init(IServiceProvider service) { _resolver = new AppDependencyResolver(service); } private AppDependencyResolver(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } private readonly IServiceProvider _serviceProvider; public object GetService(Type serviceType) { return _serviceProvider.GetService(serviceType); } public T GetService<T>() { return _serviceProvider.GetService<T>(); } } }
2、startup调用init方法初始化
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { AppDependencyResolver.Init(app.ApplicationServices); }
3、定义静态方法
using GWHomeReport.Cache; using GWHomeReport.Model.RQ; using GWHomeReport.SysCore; using GWHomeReport.Util.Meta; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace GWHomeReport.WebApi.Util { public class StaticData { public static List<GWHomeReport.MySqlData.Entitys.SysUnit> GetChildUnit(SysUserInfo rq) { var result = new List<GWHomeReport.MySqlData.Entitys.SysUnit>(); try { var redis = AppDependencyResolver.Current.GetService<ICache>(); var sysUser = AppDependencyResolver.Current.GetService<ISysUser>(); string _redisKey = rq.GetSysKey("childunit"); result = redis.Get<List<GWHomeReport.MySqlData.Entitys.SysUnit>>(_redisKey); if (result == null || result.Count == 0) { result = sysUser.QueryUserChildUnit(new MySqlData.Entitys.SysUserInfo { UnitCode = rq.UnitCode }); if (result != null && result.Count() > 0) redis.Insert(_redisKey, result, CacheData.ReportCacheTime); } } catch (Exception ex) { //logger.LogError(ex.Message); } return result; } } }
4、使用静态方法
var _sysUnit = Util.StaticData.GetChildUnit(new SysUserInfo { UnitCode = rq.UnitCode });
After that you can use it anywhere, same as DependencyResolver.Current. But my suggestion - use it only if no other choice left.
https://stackoverflow.com/questions/37813721/asp-net-core-dependencyresolver

浙公网安备 33010602011771号