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

posted @ 2019-02-19 10:32  wjl910  阅读(953)  评论(0)    收藏  举报