예제 #1
0
        public void AddServices_ByEnum()
        {
            // Arrange
            var serviceCollection = new ServiceCollection();

            var registrar = new KeyedServiceRegistrar(serviceCollection);

            registrar.AddTransient <IMyService, MyService1>(AvailableServices.Service1);
            registrar.AddTransient <IMyService, MyService2>(AvailableServices.Service2);

            var services = serviceCollection.BuildServiceProvider();

            // Act
            //// var factory = services.GetService<IKeyedServiceFactory>();
            var service1 = services.GetService <IMyService>(AvailableServices.Service1);
            var service2 = services.GetService <IMyService>(AvailableServices.Service2);

            // Assert
            Assert.That(service1, Is.InstanceOf <MyService1>());
            Assert.That(service2, Is.InstanceOf <MyService2>());
        }
예제 #2
0
        public void AddServices_ByName()
        {
            // Arrange
            var serviceCollection = new ServiceCollection();

            var registrar = new KeyedServiceRegistrar(serviceCollection);

            registrar.AddTransient <IMyService, MyService1>("SERVICE1");
            registrar.AddTransient <IMyService, MyService2>("SERVICE2");

            var services = serviceCollection.BuildServiceProvider();

            // Act
            var factory  = services.GetService <IKeyedServiceFactory>();
            var service1 = factory.GetService <IMyService>("SERVICE1");
            var service2 = factory.GetService <IMyService>("SERVICE2");

            // Assert
            Assert.That(service1, Is.InstanceOf <MyService1>());
            Assert.That(service2, Is.InstanceOf <MyService2>());
        }
예제 #3
0
        public void Resolve_Func()
        {
            // Arrange
            var serviceCollection = new ServiceCollection();

            var registrar = new KeyedServiceRegistrar(serviceCollection);

            registrar.AddTransient <IMyService, MyService1>(AvailableServices.Service1);
            registrar.AddTransient <IMyService, MyService2>(AvailableServices.Service2);
            serviceCollection.AddTransient <MyServiceHostFunc>();
            serviceCollection.AddTransient <Func <object, IMyService> >(s => s.GetService <IMyService>);
            var services = serviceCollection.BuildServiceProvider();

            // Act
            var host = services.GetService <MyServiceHostFunc>();

            Assert.That(host.Factory, Is.Not.Null);
            var svc1 = host.Factory(AvailableServices.Service1);
            var svc2 = host.Factory(AvailableServices.Service2);

            // Assert
            Assert.That(svc1, Is.InstanceOf <MyService1>());
            Assert.That(svc2, Is.InstanceOf <MyService2>());
        }
예제 #4
0
        public void AddTransient()
        {
            // Arrange
            var services  = new ServiceCollection();
            var registrar = new KeyedServiceRegistrar(services);

            // Act
            registrar.AddTransient <IMyService, MyService1>("MY_KEY");

            var provider = services.BuildServiceProvider();
            var svc1     = provider.GetService <IMyService>("MY_KEY");
            var svc2     = provider.GetService <MyService1>();

            // Assert
            Assert.That(svc1, Is.InstanceOf <MyService1>());
            Assert.That(svc1, Is.Not.SameAs(svc2));
        }
예제 #5
0
        public void AddTransient_Delegate()
        {
            // Arrange
            var services  = new ServiceCollection();
            var registrar = new KeyedServiceRegistrar(services);

            // Act
            var svc = new MyService1();

            registrar.AddTransient <IMyService, MyService1>("MY_KEY", s => svc);

            var provider = services.BuildServiceProvider();
            var svc1     = provider.GetService <IMyService>("MY_KEY");
            var svc2     = provider.GetService <MyService1>();

            // Assert
            Assert.That(svc1, Is.SameAs(svc));
            Assert.That(svc1, Is.SameAs(svc2));
        }