예제 #1
0
        /// <summary>
        /// 创建一个用于命令模型的服务容器。
        /// </summary>
        /// <param name="userFactory">用户工厂。</param>
        /// <param name="mockFactoryCallback">模拟的执行器工厂回调函数。</param>
        /// <param name="redisProvider">Redis 提供程序。若为 null 值表示启用基于应用程序域各种提供程序的服务容器。</param>
        /// <returns>返回一个服务容器。</returns>
        public static IIocContainer CreateContainer(IUserFactory userFactory
                                                    , Action <CommandModel.MockExecutorFactory> mockFactoryCallback = null
                                                    , IRedisProvider redisProvider = null)
        {
            if (userFactory == null)
            {
                throw new ArgumentNullException("userFactory");
            }

            var container = new IocContainer();

            container.AddService <IUserFactory>(userFactory);
            if (redisProvider != null)
            {
                container.AddService <IRedisProvider>(redisProvider);
            }

            if (mockFactoryCallback != null)
            {
                var executorFactory = new Aoite.CommandModel.MockExecutorFactory(container);
                mockFactoryCallback(executorFactory);
                container.AddService <CommandModel.IExecutorFactory>(executorFactory);
            }
            if (Db.Engine == null)
            {
                Lazy <IDbEngine> lazyEngine = new Lazy <IDbEngine>(() => new Aoite.Data.MsSqlEngine(""));
                container.AddService <IDbEngine>(lmps => Db.Engine == null ? lazyEngine.Value : Db.Context);
            }
            return(container);
        }
예제 #2
0
        public void Value_Test3()
        {
            var parentContainer = new IocContainer();
            var childContainer  = new IocContainer(parentContainer);

            parentContainer.AddValue("value1", 1);
            parentContainer.AddValue("value2", "2");
            parentContainer.AddValue("value3", false);

            childContainer.AddValue("value1", 9999);
            childContainer.AddValue("value2", "9999");

            childContainer.AddService(typeof(IValueService), typeof(ValueService1));
            parentContainer.AddService(typeof(IValueService), typeof(ValueService2));

            var childService  = childContainer.GetService(typeof(IValueService)) as IValueService;
            var parentService = parentContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(1, parentService.Value1);
            Assert.Equal("2", parentService.Value2);
            Assert.Equal(false, parentService.Value3);

            Assert.Equal(9999, childService.Value1);
            Assert.Equal("9999", childService.Value2);
            Assert.Equal(false, childService.Value3);
        }
예제 #3
0
        public void DefaultMappingTest()
        {
            var container = new IocContainer();
            var service   = container.GetService <IDefaultMappingService>();

            Assert.IsType <DefaultMappingService2>(service);
            container.DestroyAll();

            container.AddService(typeof(IDefaultMappingService));
            service = container.GetService <IDefaultMappingService>();
            Assert.IsType <DefaultMappingService2>(service);
            container.DestroyAll();

            container.AddService(typeof(IDefaultMappingService), typeof(DefaultMappingService));
            service = container.GetService <IDefaultMappingService>();
            Assert.IsType <DefaultMappingService>(service);
        }
예제 #4
0
 public void GetServiceTest2()
 {
     var type = typeof(DefaultService1);
     var container = new IocContainer();
     container.AddService(type, true);
     var childContainer = new IocContainer(container);
     Assert.Equal(childContainer.GetService(type), container.GetService(type));
 }
예제 #5
0
        public void AddService_TypeObjectBoolean_Test1()
        {
            var container = new IocContainer();
            container.AddService(typeof(IService2), new XService2());

            var childContainer = new IocContainer(container);
            Assert.IsAssignableFrom<XService2>(childContainer.GetService(typeof(IService2)));
        }
예제 #6
0
        /// <summary>
        /// 创建一个用于命令模型的服务容器。
        /// </summary>
        /// <param name="userFactory">用户工厂。</param>
        /// <param name="redisProvider">Redis 提供程序。若为 null 值表示启用基于应用程序域各种提供程序的服务容器。</param>
        /// <returns>返回一个服务容器。</returns>
        public static IIocContainer CreateContainer(IUserFactory userFactory
                                                    , IRedisProvider redisProvider = null)
        {
            if (userFactory == null)
            {
                throw new ArgumentNullException("userFactory");
            }

            var container = new IocContainer();

            container.AddService <IUserFactory>(userFactory);
            if (redisProvider != null)
            {
                container.AddService <IRedisProvider>(redisProvider);
            }
            return(container);
        }
예제 #7
0
        public void GetUserTest()
        {
            var container = new IocContainer();
            var username  = "******";
            var s         = new SimpleCommandModelService(container);

            Assert.Null(s.User);
            container.AddService <IUserFactory>(new UserFactory(ioc => username));
            Assert.Equal(username, s.User);
        }
예제 #8
0
        public void AddService_TypeObjectBoolean_Test1()
        {
            var container = new IocContainer();

            container.AddService(typeof(IService2), new XService2());

            var childContainer = new IocContainer(container);

            Assert.IsAssignableFrom <XService2>(childContainer.GetService(typeof(IService2)));
        }
예제 #9
0
        public void GetServiceTest3()
        {
            var type           = typeof(DefaultService1);
            var container      = new IocContainer();
            var childContainer = new IocContainer(container);

            container.AddService(type, true);
            childContainer.AddService(type, true);
            Assert.NotEqual(childContainer.GetService(type), container.GetService(type));
        }
예제 #10
0
        public void LastMappingTest2()
        {
            var container = new IocContainer();

            container.AddValue("baseValue1", 10);
            container.AddValue("baseValue2", 20);
            container.AddService(typeof(LastMapperTestModel));
            var ex = Assert.Throws <ArgumentException>(() => container.GetService(typeof(LastMapperTestModel), 50));

            Assert.Equal("value1", ex.ParamName);
        }
예제 #11
0
        public void ContainsServiceServiceTest1()
        {
            var container      = new IocContainer();
            var childContainer = new IocContainer(container);
            var itype          = typeof(IService2);

            childContainer.AddService(itype, lmp => new XService2(), promote: true);
            Assert.True(childContainer.ContainsService(itype));
            childContainer.RemoveService(itype);
            Assert.False(childContainer.ContainsService(itype));
            Assert.True(childContainer.ContainsService(itype, true));
        }
예제 #12
0
        public void GetUserTest()
        {
            var container = new IocContainer();
            var command   = new SimpleCommand();
            var context   = new Context(container, command);

            Assert.Null(context.User);
            var username = "******";

            container.AddService <IUserFactory>(new UserFactory(ioc => username));
            Assert.Equal(username, context.User);
        }
예제 #13
0
        public void TypeValue_Test3()
        {
            var parentContainer = new IocContainer();
            var childContainer  = new IocContainer(parentContainer);

            parentContainer.AddValue("value1", 1);
            parentContainer.AddValue("value2", "2");
            parentContainer.AddValue("value3", false);

            childContainer.AddValue("value1", 9999);
            childContainer.AddValue("value2", "9999");

            childContainer.AddService(typeof(IValueService), typeof(ValueService1));
            parentContainer.AddService(typeof(IValueService), typeof(ValueService2));

            var childService  = childContainer.GetService(typeof(IValueService)) as IValueService;
            var parentService = parentContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(1, parentService.Value1);
            Assert.Equal("2", parentService.Value2);
            Assert.Equal(false, parentService.Value3);

            Assert.Equal(9999, childService.Value1);
            Assert.Equal("9999", childService.Value2);
            Assert.Equal(false, childService.Value3);

            childContainer.AddValue(typeof(IValueService), "value2", "8888");
            var childService2 = childContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(9999, childService2.Value1);
            Assert.Equal("9999", childService2.Value2); //- 因为已映射,所以这里的值还是历史值
            Assert.Equal(false, childService2.Value3);

            childContainer.RemoveService(typeof(IValueService));
            childContainer.AddService(typeof(IValueService), typeof(ValueService1));

            var childService3 = childContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal("8888", childService3.Value2);
        }
예제 #14
0
        void ITestMethodHandler.Start()
        {
            var container = new IocContainer();

            this._factory = new ExecutorFactory(container);
            var methodInfo = TestContext.MethodInfo.MethodInfo;
            var db         = methodInfo.GetAttribute <DbAttribute>();
            var provider   = db == null ? DbEngineProvider.MicrosoftSqlServerCompact : db.Provider;

            switch (provider)
            {
            case DbEngineProvider.MicrosoftSqlServer:
                this._testManager = new MsSqlTestManager();
                break;

            default:
                this._testManager = new MsCeTestManager();
                break;
            }
            Manager = this._testManager.Manager;
            container.AddService(this.Manager);
            container.AddService <IDbEngine>(lmps => this.Context);

            var methodScripts = methodInfo.GetAttribute <ScriptsAttribute>();

            if (methodScripts != null)
            {
                this._testManager.Execute(methodScripts.Keys);
            }
            else
            {
                var classScripts = this.GetType().GetAttribute <ScriptsAttribute>();
                if (classScripts != null)
                {
                    this._testManager.Execute(classScripts.Keys);
                }
            }
        }
예제 #15
0
        public void LastMappingTest1()
        {
            var container = new IocContainer();

            container.AddValue("baseValue1", 10);
            container.AddValue("baseValue2", 20);
            container.AddService(typeof(LastMapperTestModel));
            var model = container.GetService(typeof(LastMapperTestModel), 50, 80) as LastMapperTestModel;

            Assert.Equal(10, model.BaseValue1);
            Assert.Equal(20, model.BaseValue2);
            Assert.Equal(80, model.Value1);
            Assert.Equal(50, model.Value2);
        }
예제 #16
0
        public void AddService_TypeBooleanBoolean_Test2()
        {
            var type  = typeof(DefaultService1);
            var itype = typeof(IService1);

            var container = new IocContainer();

            container.AddService(type, true);
            Assert.NotNull(container.GetService(type));
            Assert.NotNull(container.GetService(itype));
            Assert.Equal(container.GetService(type), container.GetService(type));
            Assert.Equal(container.GetService(type), container.GetService(itype));
            Assert.IsAssignableFrom(type, container.GetService(itype));
        }
예제 #17
0
        public void AddService_TypeBooleanBoolean_Test2()
        {
            var type = typeof(DefaultService1);
            var itype = typeof(IService1);

            var container = new IocContainer();

            container.AddService(type, true);
            Assert.NotNull(container.GetService(type));
            Assert.NotNull(container.GetService(itype));
            Assert.Equal(container.GetService(type), container.GetService(type));
            Assert.Equal(container.GetService(type), container.GetService(itype));
            Assert.IsAssignableFrom(type, container.GetService(itype));
        }
예제 #18
0
        public void RemoveServiceTest2()
        {
            var container      = new IocContainer();
            var childContainer = new IocContainer(container);
            var itype          = typeof(IService2);

            childContainer.AddService(itype, lmp => new XService2(), promote: true);
            Assert.True(container.ContainsService(itype));
            Assert.True(childContainer.ContainsService(itype));
            container.AddService(itype, lmp => new DefaultService2());
            Assert.IsAssignableFrom <XService2>(childContainer.GetService(itype));
            Assert.IsAssignableFrom <DefaultService2>(container.GetService(itype));
            childContainer.RemoveService(itype, true);
            Assert.False(container.ContainsService(itype));
            Assert.False(childContainer.ContainsService(itype));
        }
예제 #19
0
        public void Value_Test3()
        {
            var parentContainer = new IocContainer();
            var childContainer = new IocContainer(parentContainer);
            parentContainer.AddValue("value1", 1);
            parentContainer.AddValue("value2", "2");
            parentContainer.AddValue("value3", false);

            childContainer.AddValue("value1", 9999);
            childContainer.AddValue("value2", "9999");

            childContainer.AddService(typeof(IValueService), typeof(ValueService1));
            parentContainer.AddService(typeof(IValueService), typeof(ValueService2));

            var childService = childContainer.GetService(typeof(IValueService)) as IValueService;
            var parentService = parentContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(1, parentService.Value1);
            Assert.Equal("2", parentService.Value2);
            Assert.Equal(false, parentService.Value3);

            Assert.Equal(9999, childService.Value1);
            Assert.Equal("9999", childService.Value2);
            Assert.Equal(false, childService.Value3);

        }
예제 #20
0
        public void TypeValue_Test3()
        {
            var parentContainer = new IocContainer();
            var childContainer = new IocContainer(parentContainer);
            parentContainer.AddValue("value1", 1);
            parentContainer.AddValue("value2", "2");
            parentContainer.AddValue("value3", false);

            childContainer.AddValue("value1", 9999);
            childContainer.AddValue("value2", "9999");

            childContainer.AddService(typeof(IValueService), typeof(ValueService1));
            parentContainer.AddService(typeof(IValueService), typeof(ValueService2));

            var childService = childContainer.GetService(typeof(IValueService)) as IValueService;
            var parentService = parentContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(1, parentService.Value1);
            Assert.Equal("2", parentService.Value2);
            Assert.Equal(false, parentService.Value3);

            Assert.Equal(9999, childService.Value1);
            Assert.Equal("9999", childService.Value2);
            Assert.Equal(false, childService.Value3);

            childContainer.AddValue(typeof(IValueService), "value2", "8888");
            var childService2 = childContainer.GetService(typeof(IValueService)) as IValueService;

            Assert.Equal(9999, childService2.Value1);
            Assert.Equal("9999", childService2.Value2); //- 因为已映射,所以这里的值还是历史值
            Assert.Equal(false, childService2.Value3);

            childContainer.RemoveService(typeof(IValueService));
            childContainer.AddService(typeof(IValueService), typeof(ValueService1));

            var childService3 = childContainer.GetService(typeof(IValueService)) as IValueService;
            Assert.Equal("8888", childService3.Value2);
        }
예제 #21
0
        public void LastMappingTest1()
        {
            var container = new IocContainer();
            container.AddValue("baseValue1", 10);
            container.AddValue("baseValue2", 20);
            container.AddService(typeof(LastMapperTestModel));
            var model = container.GetService(typeof(LastMapperTestModel), 50, 80) as LastMapperTestModel;

            Assert.Equal(10, model.BaseValue1);
            Assert.Equal(20, model.BaseValue2);
            Assert.Equal(80, model.Value1);
            Assert.Equal(50, model.Value2);
        }
예제 #22
0
 public void LastMappingTest2()
 {
     var container = new IocContainer();
     container.AddValue("baseValue1", 10);
     container.AddValue("baseValue2", 20);
     container.AddService(typeof(LastMapperTestModel));
     var ex = Assert.Throws<ArgumentException>(() => container.GetService(typeof(LastMapperTestModel), 50));
     Assert.Equal("value1", ex.ParamName);
 }
예제 #23
0
        public void DefaultMappingTest2()
        {
            var container = new IocContainer();
            var service = container.GetService<DefaultMappingCtorService>();
            Assert.IsType<DefaultMappingService2>(service.InnerService);
            container.DestroyAll();

            container.AddService(typeof(IDefaultMappingService), typeof(DefaultMappingService));
            service = container.GetService<DefaultMappingCtorService>();
            Assert.IsType<DefaultMappingService>(service.InnerService);
        }
예제 #24
0
 public void ContainsServiceServiceTest1()
 {
     var container = new IocContainer();
     var childContainer = new IocContainer(container);
     var itype = typeof(IService2);
     childContainer.AddService(itype, lmp => new XService2(), promote: true);
     Assert.True(childContainer.ContainsService(itype));
     childContainer.RemoveService(itype);
     Assert.False(childContainer.ContainsService(itype));
     Assert.True(childContainer.ContainsService(itype, true));
 }
예제 #25
0
 public void RemoveServiceTest1()
 {
     var container = new IocContainer();
     var childContainer = new IocContainer(container);
     var itype = typeof(IService2);
     childContainer.AddService(itype, lmp => new XService2(), promote: true);
     Assert.True(container.ContainsService(itype));
     Assert.True(childContainer.ContainsService(itype));
     container.AddService(itype, lmp => new DefaultService2());
     Assert.IsAssignableFrom<XService2>(childContainer.GetService(itype));
     Assert.IsAssignableFrom<DefaultService2>(container.GetService(itype));
     childContainer.RemoveService(itype);
     Assert.IsAssignableFrom<DefaultService2>(childContainer.GetService(itype));
     Assert.IsAssignableFrom<DefaultService2>(container.GetService(itype));
     Assert.False(childContainer.ContainsService(itype));
 }