public TestServiceA(ITestServiceC testServiceC, [MJDParameterConstant] int num)
 {
     Num            = num;
     _iTestServiceC = testServiceC;
     // this._iTestServiceC = testServiceC;
     Console.WriteLine($"{this.GetType().Name}被构造");
 }
        public IActionResult Index()
        {
            //ITestServiceA testServiceA = new TestServiceA();
            this._logger.LogWarning("This is SecondController Index");

            var c = this._iServiceProvider.GetService <ITestServiceC>();

            Console.WriteLine($"cc {object.ReferenceEquals(this._iTestServiceC, c)}");//T/F

            if (_iTestServiceCStatic == null)
            {
                _iTestServiceCStatic = _iTestServiceC;
            }
            else
            {
                Console.WriteLine($"C&C {object.ReferenceEquals(this._iTestServiceC, _iTestServiceCStatic)}");//两次不同的请求  //T/F
            }

            if (_iTestServiceBStatic == null)
            {
                _iTestServiceBStatic = _iTestServiceB;
            }
            else
            {
                Console.WriteLine($"B&B:{object.ReferenceEquals(this._iTestServiceB, _iTestServiceBStatic)}");//两次不同的请求  //T/F
            }


            this._iTestServiceA.Show();
            this._iTestServiceB.Show();
            this._iTestServiceC.Show();
            this._iTestServiceD.Show();
            this._iTestServiceE.Show();
            return(View());
        }
示例#3
0
 public FourthController(ILogger <FourthController> logger,
                         ILoggerFactory loggerFactory
                         , ITestServiceA testServiceA
                         , ITestServiceB testServiceB
                         , ITestServiceC testServiceC
                         , ITestServiceD testServiceD
                         , ITestServiceE testServiceE
                         , IServiceProvider serviceProvider
                         , IConfiguration configuration
                         , IUserService userService
                         , DbContext dbContext
                         )
 //, DbContext dbContext)
 {
     this._logger           = logger;
     this._loggerFactory    = loggerFactory;
     this._iTestServiceA    = testServiceA;
     this._iTestServiceB    = testServiceB;
     this._iTestServiceC    = testServiceC;
     this._iTestServiceD    = testServiceD;
     this._iTestServiceE    = testServiceE;
     this._iServiceProvider = serviceProvider;
     this._iConfiguration   = configuration;
     this._dbContext        = dbContext;
     this._iUserService     = userService;
 }
        public UsersController(ILoggerFactory factory,
                               ILogger <UsersController> logger,
                               ITestServiceA testServiceA,
                               ITestServiceB testServiceB,
                               ITestServiceC testServiceC,
                               ITestServiceD testServiceD,
                               IConfiguration configuration
                               , IUserService userService)
        {
            this._Factory        = factory;
            this._logger         = logger;
            this._ITestServiceA  = testServiceA;
            this._ITestServiceB  = testServiceB;
            this._ITestServiceC  = testServiceC;
            this._ITestServiceD  = testServiceD;
            this._IUserService   = userService;
            this._iConfiguration = configuration;
            this._iUserService   = userService;

            this._userList = this._iUserService.Query <Zhaoxi.EntityFrameworkCore31.Model.User>(u => u.Id > 1)
                             .OrderBy(u => u.Id)
                             .Skip(1)
                             .Take(5)
                             .Select(u => new Users()
            {
                UserID    = u.Id,
                UserEmail = u.Email,
                UserName  = u.Name
            }).ToList();
        }
示例#5
0
 public UserDAL(ITestServiceA testServiceA, ITestServiceB testServiceB, ITestServiceC testServiceC, ITestServiceD testServiceD, ITestServiceE testServiceE)
 {
     this._iTestServiceA = testServiceA;
     this._iTestServiceB = testServiceB;
     this._iTestServiceC = testServiceC;
     this._iTestServiceD = testServiceD;
     this._iTestServiceE = testServiceE;
 }
示例#6
0
 public IocTest(ITestServiceA serviceA,
                ITestServiceB serviceB,
                ITestServiceC serviceC)
 {
     _serviceA = serviceA;
     _serviceB = serviceB;
     _serviceC = serviceC;
 }
        public UsersController(ILoggerFactory factory,
                               ILogger <UsersController> logger,
                               ITestServiceA testServiceA,
                               ITestServiceB testServiceB,
                               ITestServiceC testServiceC,
                               ITestServiceD testServiceD,
                               IConfiguration configuration
                               , IUserService userService)
        {
            this._Factory        = factory;
            this._logger         = logger;
            this._ITestServiceA  = testServiceA;
            this._ITestServiceB  = testServiceB;
            this._ITestServiceC  = testServiceC;
            this._ITestServiceD  = testServiceD;
            this._IUserService   = userService;
            this._iConfiguration = configuration;
            this._iUserService   = userService;


            #region 为了测试方便,不从数据获取数据,使用内存
            //this._userList = this._iUserService.Query<Zhaoxi.EntityFrameworkCore31.Model.User>(u => u.Id > 1)
            //                    .OrderBy(u => u.Id)
            //                    .Skip(1)
            //                    .Take(5)
            //                    .Select(u => new Users()
            //                    {
            //                        UserID = u.Id,
            //                        UserEmail = u.Email,
            //                        UserName = u.Name
            //                    }).ToList();

            this._userList = new List <Users>()
            {
                new Users {
                    UserID = 1, UserName = "******"
                },
                new Users {
                    UserID = 2, UserName = "******"
                },
                new Users {
                    UserID = 3, UserName = "******"
                },
                new Users {
                    UserID = 4, UserName = "******"
                },
                new Users {
                    UserID = 5, UserName = "******"
                },
                new Users {
                    UserID = 6, UserName = "******"
                },
            };


            #endregion
        }
 public FirstController(ILogger <FirstController> logger, ILoggerFactory loggerFactory,
                        ITestServiceA iTestServiceA,
                        ITestServiceB iTestServiceB,
                        ITestServiceC iTestServiceC)
 {
     _logger        = logger;
     _loggerFactory = loggerFactory;
     _iTestServiceA = iTestServiceA;
     _iTestServiceB = iTestServiceB;
     _iTestServiceC = iTestServiceC;
 }
 public SecondController(ILoggerFactory loggerFactory, ILogger <SecondController> logger, ITestServiceA testServiceA, ITestServiceB testServiceB, ITestServiceC testServiceC, ITestServiceD testServiceD, IA ia, IUserService userService)
 {
     this._Factory       = loggerFactory;
     this._logger        = logger;
     this._ITestServiceA = testServiceA;
     this._ITestServiceB = testServiceB;
     this._ITestServiceC = testServiceC;
     this._ITestServiceD = testServiceD;
     this._IA            = ia;
     this._IUserService  = userService;
 }
 public SecondController(
     ITestServiceA testServiceA
     , ITestServiceB testServiceB
     , ITestServiceC testServiceC
     , ITestServiceD testServiceD)
 {
     this._iTestServiceA = testServiceA;
     this._iTestServiceB = testServiceB;
     this._iTestServiceC = testServiceC;
     this._iTestServiceD = testServiceD;
 }
示例#11
0
 public FilterController(IConfiguration configuration,
                         ILogger <FilterController> logger,
                         ITestServiceA iTestServiceA,
                         ITestServiceB iTestServiceB,
                         ITestServiceC iTestServiceC)
 {
     _configuration = configuration;
     _logger        = logger;
     _iTestServiceA = iTestServiceA;
     _iTestServiceB = iTestServiceB;
     _iTestServiceC = iTestServiceC;
 }
示例#12
0
 public FourthController(ILoggerFactory factory, ILogger <SecondController> ilogger,
                         ITestServiceA testServiceA,
                         ITestServiceB testServiceB,
                         ITestServiceC testServiceC,
                         ITestServiceD testServiceD,
                         IA a)
 {
     _factory      = factory;
     _ilogger      = ilogger;
     _testServiceA = testServiceA;
     _testServiceB = testServiceB;
     _testServiceC = testServiceC;
     _testServiceD = testServiceD;
     _a            = a;
 }
 public SecondController(ILoggerFactory factory, ILogger <SecondController> ilogger,
                         ITestServiceA testServiceA,
                         ITestServiceB testServiceB,
                         ITestServiceC testServiceC,
                         IEnumerable <ITestServiceD> testServiceDs,
                         IA a)
 {
     _factory       = factory;
     _ilogger       = ilogger;
     _testServiceA  = testServiceA;
     _testServiceB  = testServiceB;
     _testServiceC  = testServiceC;
     _testServiceDs = testServiceDs;
     _a             = a;
 }
示例#14
0
 public FourthController(ILogger <FourthController> logger
                         , ITestServiceA testServiceA
                         , ITestServiceB testServiceB
                         , ITestServiceC testServiceC
                         , ITestServiceD testServiceD
                         , ITestServiceE testServiceE
                         , IA a)
 {
     this._logger        = logger;
     this._iTestServiceA = testServiceA;
     this._iTestServiceB = testServiceB;
     this._iTestServiceC = testServiceC;
     this._iTestServiceD = testServiceD;
     this._iTestServiceE = testServiceE;
     this._ia            = a;
 }
示例#15
0
 public SecondController(ILoggerFactory loggerFactory,
                         ILogger <SecondController> logger,
                         ITestServiceA testServiceA,
                         ITestServiceB testServiceB,
                         ITestServiceC testServiceC,
                         ITestServiceD testServiceD,
                         IA a)
 {
     _loggerFactory = loggerFactory;
     _logger        = logger;
     _testServiceA  = testServiceA;
     _testServiceB  = testServiceB;
     _testServiceC  = testServiceC;
     _testServiceD  = testServiceD;
     _a             = a;
 }
示例#16
0
 public UsersController(ILoggerFactory factory,
                        ILogger <SecondController> logger,
                        ITestServiceA testServiceA,
                        ITestServiceB testServiceB,
                        ITestServiceC testServiceC,
                        ITestServiceD testServiceD,
                        IA a)
 {
     this._Factory       = factory;
     this._logger        = logger;
     this._ITestServiceA = testServiceA;
     this._ITestServiceB = testServiceB;
     this._ITestServiceC = testServiceC;
     this._ITestServiceD = testServiceD;
     this._IA            = a;
 }
示例#17
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            #region Autofac

            #region autofac 获取服务
            //ContainerBuilder containerBuilder = new ContainerBuilder();
            //containerBuilder.RegisterType<TestServiceB>().As<ITestServiceB>();
            //IContainer container = containerBuilder.Build();
            //ITestServiceB serviceB=   container.Resolve<ITestServiceB>();//获取服务
            //serviceB.show();
            #endregion

            #region 构造函数注入

            ContainerBuilder containerBuilder = new ContainerBuilder();
            containerBuilder.RegisterType <TestServiceB>().As <ITestServiceB>();
            containerBuilder.RegisterType <TestServiceC>().As <ITestServiceC>();

            IContainer    container = containerBuilder.Build();
            ITestServiceC serviceC  = container.Resolve <ITestServiceC>();
            serviceC.show();

            #endregion
            #endregion

            #region JWT鉴权授权
            var ValidAudience = Configuration["audience"];
            var ValidIssuer   = Configuration["issuer"];
            var SecurityKey   = Configuration["SecurityKey"];
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)//jwt  josn web token
            .AddJwtBearer(x =>
            {
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    ValidAudience            = ValidAudience,
                    ValidIssuer      = ValidIssuer,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecurityKey))
                };
            });
            #endregion
        }
示例#18
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public IActionResult Index()
        {
            //ITestServiceA testServiceA = new TestServiceA();
            this._logger.LogWarning("This is SecondController Index");

            //cc True
            //C & C False
            //B & B:True
            //ServiceProvoder 也是作用域单例的,同一个ServiceProvider产生的C都是一样的
            //一个请求只会产生一个ServiceProvider
            var c = this._iServiceProvider.GetService <ITestServiceC>(); //实例化服务

            //test c
            Console.WriteLine($"cc {object.ReferenceEquals(this._iTestServiceC, c)}");//T/F

            //test static c
            if (_iTestServiceCStatic == null)
            {
                _iTestServiceCStatic = _iTestServiceC;
            }
            else
            {
                Console.WriteLine($"C&C {object.ReferenceEquals(this._iTestServiceC, _iTestServiceCStatic)}");//两次不同的请求  //T/F
            }

            //test static b
            if (_iTestServiceBStatic == null)
            {
                _iTestServiceBStatic = _iTestServiceB;
            }
            else
            {
                Console.WriteLine($"B&B:{object.ReferenceEquals(this._iTestServiceB, _iTestServiceBStatic)}");//两次不同的请求  //T/F
            }

            this._iTestServiceA.Show();
            this._iTestServiceB.Show();
            this._iTestServiceC.Show();
            this._iTestServiceD.Show();
            this._iTestServiceE.Show();

            return(View());
        }
示例#19
0
 public SecondController(ILogger <SecondController> logger,
                         ILoggerFactory loggerFactory,
                         ITestServiceA testServiceA,
                         ITestServiceB testServiceB,
                         ITestServiceC testServiceC,
                         ITestServiceD testServiceD,
                         ITestServiceE testServiceE,
                         IServiceProvider iServiceProvider
                         )
 {
     _logger                = logger;
     this._loggerFactory    = loggerFactory;
     this._iTestServiceA    = testServiceA;
     this._iTestServiceB    = testServiceB;
     this._iTestServiceC    = testServiceC;
     this._iTestServiceD    = testServiceD;
     this._iTestServiceE    = testServiceE;
     this._iServiceProvider = iServiceProvider;
 }
 public ThirdController(ILogger <ThirdController> logger,
                        ILoggerFactory loggerFactory
                        , ITestServiceA testServiceA
                        , ITestServiceB testServiceB
                        , ITestServiceC testServiceC
                        , ITestServiceD testServiceD
                        , ITestServiceE testServiceE
                        , IServiceProvider serviceProvider
                        , IConfiguration configuration)
 {
     this._logger           = logger;
     this._loggerFactory    = loggerFactory;
     this._iTestServiceA    = testServiceA;
     this._iTestServiceB    = testServiceB;
     this._iTestServiceC    = testServiceC;
     this._iTestServiceD    = testServiceD;
     this._iTestServiceE    = testServiceE;
     this._iServiceProvider = serviceProvider;
     this._iConfiguration   = configuration;
 }
示例#21
0
 public SecondController(ILoggerFactory factory,
                         ILogger <SecondController> logger,
                         CyfMYSQLContext mysqlcontext,
                         CyfMSSQLContext mssqlcontext,
                         ITestServiceA testServiceA,
                         ITestServiceB testServiceB,
                         ITestServiceC testServiceC,
                         ITestServiceD testServiceD,
                         IA a)
 {
     this._Factory       = factory;
     this._logger        = logger;
     this._ITestServiceA = testServiceA;
     this._ITestServiceB = testServiceB;
     this._ITestServiceC = testServiceC;
     this._ITestServiceD = testServiceD;
     this._IA            = a;
     this._Mysqlcontext  = mysqlcontext;
     this._Mssqlcontext  = mssqlcontext;
 }
 /// <summary>
 /// 来自DI依赖注入---构造函数注入---构造A对象依赖B对象,自动初始化B对象传入
 ///
 /// 有个容器,负责构造SecondController(反射)--反射构造函数--需要B--再构造B---然后再构造A
 /// </summary>
 /// <param name="logger"></param>
 /// <param name="loggerFactory"></param>
 public SecondController(ILogger <SecondController> logger,
                         ILoggerFactory loggerFactory
                         , ITestServiceA testServiceA
                         , ITestServiceB testServiceB
                         , ITestServiceC testServiceC
                         , ITestServiceD testServiceD
                         , ITestServiceE testServiceE
                         , IServiceProvider serviceProvider)
 //一次注入这么多,可能用不上,能不能我自己生成? 不建议,
 //1 大部分对象生成其实很快,且不占资源--特殊可以自己控制
 //2 对象生命周期不同,注入的是跟controller的,action是跟方法的
 {
     this._logger           = logger;
     this._loggerFactory    = loggerFactory;
     this._iTestServiceA    = testServiceA;
     this._iTestServiceB    = testServiceB;
     this._iTestServiceC    = testServiceC;
     this._iTestServiceD    = testServiceD;
     this._iTestServiceE    = testServiceE;
     this._iServiceProvider = serviceProvider;
 }
示例#23
0
 public void Init(ITestServiceC testServiceC)
 {
     this._iTestServiceC = testServiceC;
 }
示例#24
0
        static void Main(string[] args)
        {
            ///容器的使用:
            ///            实例化一个容器;
            ///            注册
            ///            获取服务
            IServiceCollection container = new ServiceCollection();

            // IServiceCollection
            container.AddTransient <ITestServiceA, TestServiceA>();     // 瞬时生命周期  每一次获取的对象都是新的对象
            container.AddSingleton <ITestServiceB, TestServiceB>();     // 单例生命周期  在容器中永远只有当前这一个
            container.AddScoped <ITestServiceC, TestServiceC>();        //当前请求作用域内  只有当前这个实例

            container.AddSingleton <ITestServiceD>(new TestServiceD()); // 也是单例生命周期

            ServiceProvider provider = container.BuildServiceProvider();

            ITestServiceA testA  = provider.GetService <ITestServiceA>();
            ITestServiceA testA1 = provider.GetService <ITestServiceA>();

            Console.WriteLine(object.ReferenceEquals(testA, testA1));

            ITestServiceB testB  = provider.GetService <ITestServiceB>();
            ITestServiceB testB1 = provider.GetService <ITestServiceB>();

            Console.WriteLine(object.ReferenceEquals(testB, testB1));

            ITestServiceC testC  = provider.GetService <ITestServiceC>();
            ITestServiceC testC1 = provider.GetService <ITestServiceC>();

            Console.WriteLine(object.ReferenceEquals(testC, testC1));

            IServiceScope scope  = provider.CreateScope();
            ITestServiceC testc3 = provider.GetService <ITestServiceC>();
            var           testc4 = scope.ServiceProvider.GetService <ITestServiceC>();

            Console.WriteLine(object.ReferenceEquals(testc3, testc4));

            ITestServiceD testD  = provider.GetService <ITestServiceD>();
            ITestServiceD testD1 = provider.GetService <ITestServiceD>();

            Console.WriteLine(object.ReferenceEquals(testD, testD1));



            /*
             * Console.WriteLine("Hello World!");
             *
             * var user = new {
             *  Id=11,
             *  Name="HelloDavy",
             *  Age=18
             * };
             *
             * Console.WriteLine(user);
             * var options = new JsonSerializerOptions();
             * options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All);
             * var json = JsonSerializer.Serialize(user,options);
             * Console.WriteLine(json);
             *
             * Console.WriteLine("**************************************");
             * {
             *  SharpSix six = new SharpSix();
             *  People people = new People()
             *  {
             *      Id = 505,
             *      Name = "马尔凯蒂"
             *  };
             *  six.Show(people);
             * }
             *
             * Console.WriteLine("**************************************");
             * {
             *  SharpSeven seven = new SharpSeven();
             *  seven.Show();
             * }*/
        }
示例#25
0
 public TestServiceB(ITestServiceA testServiceA, [MyParameter] string name, ITestServiceC testServiceC, [MyParameter] int age)
 {
     this._iTestServiceA = testServiceA;
     this._Age           = age;
 }
示例#26
0
 public UserDAL(ITestServiceA testServiceA, ITestServiceB testServiceB
                , ITestServiceC testServiceC, ITestServiceD testServiceD)
 {
     this._iTestServiceA = testServiceA;
     this._iTestServiceB = testServiceB;
 }
示例#27
0
 public TestServiceE(ITestServiceC serviceC)
 {
     Console.WriteLine($"{this.GetType().Name}被构造。。。");
 }
示例#28
0
        static void Main(string[] args)
        {
            try
            {
                IServiceCollection services = new ServiceCollection();
                services.AddTransient <ITestServiceA, TestServiceA>(); //瞬时生命周期
                services.AddSingleton <ITestServiceB, TestServiceB>(); //单例--进程唯一实例
                services.AddScoped <ITestServiceC, TestServiceC>();    //作用域单例--一个请求一个实例
                services.AddTransient <ITestServiceE, TestServiceE>();
                services.AddTransient <ITestServiceD, TestServiceD>();
                var container = services.BuildServiceProvider();
                {
                    System.Console.WriteLine("****************1************");
                    var A1 = container.GetService <ITestServiceA>();
                    var A2 = container.GetService <ITestServiceA>();
                    System.Console.WriteLine(A1.Equals(A2));
                }
                {
                    System.Console.WriteLine("****************2************");
                    var B1 = container.GetService <ITestServiceB>();
                    var B2 = container.GetService <ITestServiceB>();
                    System.Console.WriteLine(B1.Equals(B2));
                }
                {
                    System.Console.WriteLine("****************3************");
                    var C1 = container.GetService <ITestServiceC>();
                    var C2 = container.GetService <ITestServiceC>();
                    System.Console.WriteLine(C1.Equals(C2));
                }
                {
                    System.Console.WriteLine("****************3************");
                    var C1 = container.GetService <ITestServiceC>();
                    var C2 = container.GetService <ITestServiceC>();
                    var C3 = container.CreateScope().ServiceProvider.GetService <ITestServiceC>();
                    var C4 = container.CreateScope().ServiceProvider.GetService <ITestServiceC>();
                    //所谓作用域,就是CreateScope,只要是以一个Scope 就是相同的

                    ITestServiceC C5 = null;
                    ITestServiceC C6 = null;
                    ITestServiceC C7 = null;
                    Task.Run(() =>
                             { C5 = container.GetService <ITestServiceC>(); });//线程--线程没有影响!
                    Task.Run(() =>
                             { C6 = container.GetService <ITestServiceC>(); }).ContinueWith(t =>
                    {
                        C7 = container.GetService <ITestServiceC>();
                    });                                      //c5-c6-c7线程 其实没关系
                    System.Console.WriteLine(C1.Equals(C2)); //T
                    System.Console.WriteLine(C1.Equals(C3)); //F
                    System.Console.WriteLine(C1.Equals(C4)); //F
                    System.Console.WriteLine(C3.Equals(C4)); //F
                    System.Console.WriteLine(C3.Equals(C5)); //F
                    System.Console.WriteLine(C3.Equals(C6)); //F
                    System.Console.WriteLine(C3.Equals(C7)); //F
                    System.Console.WriteLine(C5.Equals(C6)); //T
                    System.Console.WriteLine(C5.Equals(C7)); //T
                    System.Console.WriteLine(C6.Equals(C7)); //T
                    //10个  T /F
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            //Console.WriteLine("Hello World!");
        }
示例#29
0
        static void Main(string[] args)
        {
            ///容器的使用:
            ///            实例化一个容器;
            ///            注册
            ///            获取服务
            IServiceCollection container = new ServiceCollection();

            // IServiceCollection
            container.AddTransient <ITestServiceA, TestServiceA>();     // 瞬时生命周期  每一次获取的对象都是新的对象
            container.AddSingleton <ITestServiceB, TestServiceB>();     // 单例生命周期  在容器中永远只有当前这一个
            container.AddScoped <ITestServiceC, TestServiceC>();        //当前请求作用域内  只有当前这个实例

            container.AddSingleton <ITestServiceD>(new TestServiceD()); // 也是单例生命周期

            ServiceProvider provider = container.BuildServiceProvider();

            ITestServiceA testA  = provider.GetService <ITestServiceA>();
            ITestServiceA testA1 = provider.GetService <ITestServiceA>();

            Console.WriteLine(object.ReferenceEquals(testA, testA1));

            ITestServiceB testB  = provider.GetService <ITestServiceB>();
            ITestServiceB testB1 = provider.GetService <ITestServiceB>();

            Console.WriteLine(object.ReferenceEquals(testB, testB1));

            ITestServiceC testC  = provider.GetService <ITestServiceC>();
            ITestServiceC testC1 = provider.GetService <ITestServiceC>();

            Console.WriteLine(object.ReferenceEquals(testC, testC1));

            IServiceScope scope  = provider.CreateScope();
            ITestServiceC testc3 = provider.GetService <ITestServiceC>();
            var           testc4 = scope.ServiceProvider.GetService <ITestServiceC>();

            Console.WriteLine(object.ReferenceEquals(testc3, testc4));

            ITestServiceD testD  = provider.GetService <ITestServiceD>();
            ITestServiceD testD1 = provider.GetService <ITestServiceD>();

            Console.WriteLine(object.ReferenceEquals(testD, testD1));

            //Console.WriteLine("Hello World!");

            //var user = new
            //{
            //    Id = 11,
            //    Name = "Richard"
            //};
            //Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(user));


            //Console.WriteLine("**************************************");
            //{
            //    SharpSix six = new SharpSix();
            //    People people = new People()
            //    {
            //        Id = 505,
            //        Name = "马尔凯蒂"
            //    };
            //    six.Show(people);
            //}

            //Console.WriteLine("**************************************");
            //{
            //    SharpSeven seven = new SharpSeven();
            //    seven.Show();
            //}
        }
        public IActionResult Index()
        {
            //自定义容器  常规IOC容器 容器对象--注册--生成
            //构造对象A时,需要依赖B对象,那么就需要先构造B对象传入,也就是能在构造对象时,对象的依赖初始化并注入进去,这种技术手段就叫做依赖注入
            //为什么要依赖注入  要IOC控制反转,不依赖细节,细节还会依赖细节,为了屏蔽细节,所以需要依赖注入去解决无限层级的对象依赖
            //IOC是一种设计模式,是一种程序设计的目标
            //DI是IOC实现的手段,是一种编码技术
            IMJDContainer container = new MJDContainer();

            //container.Register<IProductService, ProductService>();
            //container.Register<ISqlHelper, SqlHelper>();
            //container.Register<ISqlHelper, SqlHelper>("mysql");
            //container.Register<ITestServiceB, TestServiceB>();
            //container.Register<ITestServiceB, TestServiceB>("myB");//注册带别名的
            //container.Register<ITestServiceA, TestServiceA>(paraList:new object[]{ 3});
            //container.Register<ITestServiceC, TestServiceC>();
            //依赖抽象
            //ISqlHelper sqlHelper = container.Resolve<ISqlHelper>();
            //方法注入
            //单接口多实现
            //ISqlHelper mysqlHelper = container.Resolve<ISqlHelper>("mysql");
            // IProductService productService = container.Resolve<IProductService>();



            //注入参数是string 或int
            //对象生命周期管理--是否重用对象
            //瞬时、单例、作用域单例Scope

            //container.Register<ITestServiceC, TestServiceC>(lifetimeType: LifetimeType.Singleton);

            //ITestServiceC a = container.Resolve<ITestServiceC>();

            //ITestServiceC b = container.Resolve<ITestServiceC>();

            //var f = object.ReferenceEquals(a,b);



            //瞬时、单例、作用域单例Scope
            //Http请求时,一个请求处理过程中,创建一个实例,不同的请求过程处理,就是不同的实例
            //区分请求,Http请求--Asp.NetCore内置Kestrel,初始化一个容器实例,然后每一次请求Http,就clone一个容器实例,或者就叫做创建子容器(包含注册关系),
            //然后一个请求就是一个子容器实例,那么就可以做到请求单例
            //container.Register<ITestServiceC, TestServiceC>(lifetimeType: LifetimeType.Scope);
            //ITestServiceC a1 = container.Resolve<ITestServiceC>();
            //ITestServiceC a2 = container.Resolve<ITestServiceC>();
            //Console.WriteLine(object.ReferenceEquals(a1,a2));

            //IMJDContainer container1 = container.CreateChildContainer();
            //ITestServiceC a11 = container1.Resolve<ITestServiceC>();
            //ITestServiceC a12 = container1.Resolve<ITestServiceC>();
            //Console.WriteLine(object.ReferenceEquals(a11, a12));

            //IMJDContainer container2 = container.CreateChildContainer();
            //ITestServiceC a21 = container2.Resolve<ITestServiceC>();
            //ITestServiceC a22 = container2.Resolve<ITestServiceC>();
            //Console.WriteLine(object.ReferenceEquals(a21, a22));

            //Console.WriteLine(object.ReferenceEquals(a1, a11));
            //Console.WriteLine(object.ReferenceEquals(a1, a21));
            //Console.WriteLine(object.ReferenceEquals(a11, a21));
            //Console.WriteLine(object.ReferenceEquals(a11, a22));
            //Console.WriteLine(object.ReferenceEquals(a12, a21));
            //Console.WriteLine(object.ReferenceEquals(a12, a22));


            {
                //IOC -AOP
                container.Register <ITestServiceB, TestServiceB>();
                container.Register <ITestServiceC, TestServiceC>();

                ITestServiceC testServiceC = container.Resolve <ITestServiceC>();
                testServiceC.show();
                //testServiceC = (ITestServiceC)CustomAopExtend.AOP(testServiceC, typeof(ITestServiceC));
                //testServiceC.show();
            }
            return(View());
        }