解决.net core有循环依赖时注入的问题
方案1:循环依赖的服务不直接注入,而是改成用到的地方从容器中获取
public class OrderInfoService
 {
        private IServiceProvider _serviceProvider;
        public OrderInfoService(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }
        public string GetOrderNo()
        {
            UserInfoService userInfoService = _serviceProvider.GetService<UserInfoService>();
            return userInfoService.GenUserNo();
        }
    }
方案2:使用Lazy延时加载,注入时注入延迟加载的版本比如
public class OrderInfoService
    {
        private Lazy<UserInfoService> _userInfoService;
        public OrderInfoService(Lazy<UserInfoService> userInfoService)
        {
            _userInfoService = userInfoService;
        }
        public string GetOrderNo()
        {
            return _userInfoService.Value.GenUserNo();
        }
    }
此方式需要注入
services.AddTransient(typeof(Lazy<>), typeof(Lazier<>));
internal class Lazier<T> : Lazy<T> where T : class
{
    public Lazier(IServiceProvider provider)
        : base(() => provider.GetRequiredService<T>())
    {
    
    }
}
参考链接:https://stackoverflow.com/questions/44934511/does-net-core-dependency-injection-support-lazyt
                    
                
                
            
        
浙公网安备 33010602011771号