public IServiceB myServiceB(IServiceA svcA, [Inject("svcC")] IServiceC c)
        {
            Assert.IsNotNull(svcA);
            Assert.IsNotNull(c);

            return(obj);
        }
		public void Initialize()
		{
			ServA = new ServiceARealization();
			ServB1 = new ServiceBRealization();
			ServB2 = new ServiceBRealization();
			ServC = new ServiceCRealization();
		}
            public ServiceCDecorator(IServiceC inner)
            {
                if (inner == null)
                {
                    throw new ArgumentNullException(nameof(inner));
                }

                _inner = inner;
            }
        private static void UsingScoped()
        {
            Console.WriteLine(nameof(UsingScoped));

            ServiceProvider RegisterServices()
            {
                IServiceCollection services = new ServiceCollection();

                services.AddSingleton <INumberService, NumberService>();
                services.AddTransient <ControllerX>();
                services.AddSingleton <IServiceB, ServiceB>();
                services.AddScoped <IServiceA, ServiceA>();
                services.AddTransient <IServiceC, ServiceC>();
                return(services.BuildServiceProvider());
            }

            using (ServiceProvider container = RegisterServices())
            {
                using (IServiceScope scope1 = container.CreateScope())
                {
                    IServiceA a1 = scope1.ServiceProvider.GetRequiredService <IServiceA>();
                    a1.A();
                    IServiceA a2 = scope1.ServiceProvider.GetRequiredService <IServiceA>();
                    a2.A();
                    IServiceB b1 = scope1.ServiceProvider.GetRequiredService <IServiceB>();
                    b1.B();
                    IServiceB b2 = scope1.ServiceProvider.GetRequiredService <IServiceB>();
                    b2.B();
                    IServiceC c1 = scope1.ServiceProvider.GetRequiredService <IServiceC>();
                    c1.C();
                    IServiceC c2 = scope1.ServiceProvider.GetRequiredService <IServiceC>();
                    c2.C();
                }

                Console.WriteLine("end of scope 1");

                using (IServiceScope scope2 = container.CreateScope())
                {
                    IServiceA a1 = scope2.ServiceProvider.GetRequiredService <IServiceA>();
                    a1.A();
                    IServiceA a2 = scope2.ServiceProvider.GetRequiredService <IServiceA>();
                    a2.A();
                    IServiceB b1 = scope2.ServiceProvider.GetRequiredService <IServiceB>();
                    b1.B();
                    IServiceB b2 = scope2.ServiceProvider.GetRequiredService <IServiceB>();
                    b2.B();
                    IServiceC c1 = scope2.ServiceProvider.GetRequiredService <IServiceC>();
                    c1.C();
                    IServiceC c2 = scope2.ServiceProvider.GetRequiredService <IServiceC>();
                    c2.C();
                }

                Console.WriteLine("end of scope 2");
            }
        }
Exemple #5
0
        static void Main()
        {
            IServiceLocator serviceLocator = new ServiceLocator();

            IServiceA serviceA = serviceLocator.GetService <IServiceA>();
            IServiceB serviceB = serviceLocator.GetService <IServiceB>();
            IServiceC serviceC = serviceLocator.GetService <IServiceC>();

            // Задержка.
            Console.ReadKey();
        }
Exemple #6
0
        public IActionResult Index2()
        {
            IServiceA serviceA = DependencyResolver.Current.GetService <IServiceA>();
            IServiceB serviceB = DependencyResolver.Current.GetService <IServiceB>();
            IServiceC serviceC = DependencyResolver.Current.GetService <IServiceC>();

            ViewBag.ServiceA = serviceA.Run();
            ViewBag.ServiceB = serviceB.Run();
            ViewBag.ServiceC = serviceC.Run();

            return(View("Index"));
        }
Exemple #7
0
        private static void UsingScoped()
        {
            Console.WriteLine(nameof(UsingScoped));

            ServiceProvider RegisterServices()
            {
                var services = new ServiceCollection();

                services.AddSingleton <INumberService, NumberService>();
                services.AddScoped <IServiceA, ServiceA>();
                services.AddSingleton <IServiceB, ServiceB>();
                services.AddTransient <IServiceC, ServiceC>();
                return(services.BuildServiceProvider());
            }

            using (ServiceProvider container = RegisterServices())
            {
                //调用ServiceProvider的CreateScope()方法创建一个作用域
                //返回实现接口IServiceScope的作用域对象,在其中可以访问属于这个作用域的ServiceProvider
                using (IServiceScope scope1 = container.CreateScope())
                {
                    //因为IServiceA注册为Scoped,所以在同一作用域下返回的实例时一样的
                    IServiceA a1 = scope1.ServiceProvider.GetService <IServiceA>();
                    a1.A(); //A, 1
                    IServiceA a2 = scope1.ServiceProvider.GetService <IServiceA>();
                    a2.A(); //A, 1
                    //scope末尾不会释放IServiceB因为IServiceB是注册为单例,需要在作用域的末尾也是存活的,在程序结束时才会释放
                    IServiceB b1 = scope1.ServiceProvider.GetService <IServiceB>();
                    b1.B();
                    IServiceC c1 = scope1.ServiceProvider.GetService <IServiceC>();
                    c1.C();
                    IServiceC c2 = scope1.ServiceProvider.GetService <IServiceC>();
                    c2.C();
                }

                Console.WriteLine("end of scope1");

                using (IServiceScope scope2 = container.CreateScope())
                {
                    IServiceA a3 = scope2.ServiceProvider.GetService <IServiceA>();
                    a3.A();
                    IServiceB b2 = scope2.ServiceProvider.GetService <IServiceB>();
                    b2.B();
                    IServiceC c3 = scope2.ServiceProvider.GetService <IServiceC>();
                    c3.C();
                }
                Console.WriteLine("end of scope2");
            }
            Console.WriteLine();
        }
        public void parameters_should_propagate()
        {
            Building(builder =>
            {
                builder.RegisterServices(r => r.Register <IServiceA, ServiceAImpl>());
                builder.RegisterServices(r => r.Register <IServiceB, ServiceBImpl>());
                builder.RegisterServices(r => r.Register <IServiceC, ServiceCImpl>());
                builder.RegisterServices(r => r.Decorate <IServiceC>((context, c) => new ServiceCDecorator(c)));
            });

            var       serviceCDecorator = The <Func <IServiceA, IServiceB, IServiceC> >();
            IServiceC serviceC          = serviceCDecorator(new ServiceAImpl(), new ServiceBImpl());

            serviceC.Should().BeOfType(typeof(ServiceCDecorator));
        }
Exemple #9
0
        public void TestFicoCache()
        {
            IServiceA serviceA = _container[typeof(IServiceA)] as IServiceA;
            IServiceC serviceC = _container[typeof(IServiceC)] as IServiceC;

            serviceA.MyMethod(2, 5.5M);
            string consoleContents = _outWriter.GetStringBuilder().ToString();

            serviceC.MyMethod(2, 5.5M);

            ResetConsoleOut();

            WaitOneMillisecond();

            serviceA.MyMethod(2, 5.5M);
            Assert.IsFalse(consoleContents == _outWriter.GetStringBuilder().ToString());
        }
Exemple #10
0
 public HomeController(IServiceA serviceA, IServiceB serviceB, IServiceC serviceC)
 {
     _serviceA = serviceA;
     _serviceB = serviceB;
     _serviceC = serviceC;
 }
Exemple #11
0
 public ServiceA(IServiceB serviceB, IServiceC serviceC)
 {
     _serviceB = serviceB;
     _serviceC = serviceC;
 }
Exemple #12
0
 public ServicesViewModel(BaseServices baseServices, IServiceA serviceA, IServiceB serviceB, IServiceC serviceC, IServiceD serviceD)
     : base(baseServices)
 {
     ServiceAId = serviceA.Id;
     ServiceBId = serviceB.Id;
     ServiceCId = serviceC.Id;
     ServiceDId = serviceD.Id;
 }
		public TestConsumer([Named("Name_B2")]IServiceB servB2, IServiceC servC)
		{
			ServB2 = servB2;
			ServC = servC;
		}
Exemple #14
0
        private static void UsingScoped()
        {
            Console.WriteLine(nameof(UsingScoped));
            //局部方法
            ServiceProvider RegisterServices()
            {
                var services = new ServiceCollection();

                //注册单例服务
                services.AddSingleton <INumberService, NumberService>();
                //注册作用域服务
                services.AddScoped <IServiceA, ServiceA>();
                //注册单例服务
                services.AddSingleton <IServiceB, ServiceB>();
                //临时服务
                services.AddTransient <IServiceC, ServiceC>();
                //返回容器服务器
                return(services.BuildServiceProvider());
            }

            using (ServiceProvider container = RegisterServices())
            {
                //创建自定义作用域scope1
                using (IServiceScope scope1 = container.CreateScope())
                {
                    //IServiceA--ServiceA 在容器里是作用域服务
                    //a1和a2在作用域scop1里是一个对象
                    IServiceA a1 = scope1.ServiceProvider.GetService <IServiceA>();
                    a1.A();
                    //在作用域scope1里请求创建服务A的对象a2
                    IServiceA a2 = scope1.ServiceProvider.GetService <IServiceA>();
                    a2.A();  //此时a1和a2是一个对象

                    //IServiceB--ServiceB 在容器里是单例服务
                    //ServiceB在整个程序只有一个对象
                    IServiceB b1 = scope1.ServiceProvider.GetService <IServiceB>();
                    b1.B();

                    //IServiceC--ServiceC 在容器里是临时服务,C1和C2是两个对象
                    IServiceC c1 = scope1.ServiceProvider.GetService <IServiceC>();
                    c1.C();
                    IServiceC c2 = scope1.ServiceProvider.GetService <IServiceC>();
                    c2.C();
                }

                Console.WriteLine("scope1结束");
                //创建自定义作用域scope2
                using (IServiceScope scope2 = container.CreateScope())
                {
                    //IServiceA--ServiceA 在容器里是作用域服务
                    //a3是与(a2和a1)不是一个对象
                    IServiceA a3 = scope2.ServiceProvider.GetService <IServiceA>();
                    a3.A();
                    //IServiceB--ServiceB 在容器里是单例服务
                    //ServiceB在整个程序只有一个对象,b2与b1都是一个对象
                    IServiceB b2 = scope2.ServiceProvider.GetService <IServiceB>();
                    b2.B();
                    //IServiceC--ServiceC 在容器里是临时服务,C1和C2及C3是三个不同的对象
                    IServiceC c3 = scope2.ServiceProvider.GetService <IServiceC>();
                    c3.C();
                }
                Console.WriteLine("scope2结束");
                Console.WriteLine();
            }
        }
Exemple #15
0
 public void InitServiceC(IServiceC serviceC, [DIPParameterConstant] int index)
 {
     _serviceC = serviceC;
     Step      = index;
 }
Exemple #16
0
 public ServiceA(IServiceC serviceC, IRepoA repoA, ServiceASettings settings)
 {
 }
Exemple #17
0
 public ServiceA(IServiceC serviceC)
 {
     _serviceC = serviceC;
 }
Exemple #18
0
 public ServiceB(IServiceC serviceC, IMyLogger logger)
 {
     _logger   = logger;
     _serviceC = serviceC;
 }