Example #1
0
        protected virtual DAO InternalSelect <DAO>(Type daoType) where DAO : DaoReadable
        {
            QuillComponent component = QuillInjector.GetInstance().Container.GetComponent(daoType);
            DAO            dao       = (DAO)component.GetComponentObject(daoType);

            return(dao);
        }
        public void Inject_TargetNull_Test()
        {
            // Arrange
            QuillInjector target = new QuillInjector();

            // Act/Assert
            TestUtils.ExecuteExcectedException <QuillException>(() => target.Inject(null));
        }
Example #3
0
        // ===============================================================================
        //                                                                  Implementation
        //                                                                  ==============
        public virtual DAO Select <DAO>() where DAO : DaoReadable
        {
            Type           daoType   = typeof(DAO);
            QuillComponent component = QuillInjector.GetInstance().Container.GetComponent(daoType);
            DAO            dao       = (DAO)component.GetComponentObject(daoType);

            return(dao);
        }
 /// <summary>
 /// ループ処理実行
 /// </summary>
 /// <param name="target">インジェクション対象オブジェクト</param>
 /// <param name="context">インジェクション状態管理</param>
 /// <param name="fields">インジェクション先として抽出したフィールドのコレクション</param>
 /// <param name="injectField">フィールドへのインジェクション実行コールバック Action&lt;object, FieldInfo, QuillInjectionContext&gt;</param>
 public virtual void ForEach(object target, QuillInjectionContext context, 
     IEnumerable<System.Reflection.FieldInfo> fields, QuillInjector.CallbackInjectField injectField)
 {
     foreach(var field in fields)
     {
         injectField(target, field, context);
     }
 }
        protected virtual BEHAVIOR InternalSelect <BEHAVIOR>(Type behaviorType) where BEHAVIOR : BehaviorReadable
        {
            QuillComponent component = QuillInjector.GetInstance().Container.GetComponent(behaviorType);
            BEHAVIOR       bhv       = (BEHAVIOR)component.GetComponentObject(behaviorType);

            if (bhv.IsInitialized)
            {
                return(bhv);
            }
            QuillInjector.GetInstance().Inject(bhv);
            return(bhv);
        }
        // ===============================================================================
        //                                                                  Implementation
        //                                                                  ==============
        public virtual BEHAVIOR Select <BEHAVIOR>() where BEHAVIOR : BehaviorReadable
        {
            Type           behaviorType = typeof(BEHAVIOR);
            QuillComponent component    = QuillInjector.GetInstance().Container.GetComponent(behaviorType);
            BEHAVIOR       bhv          = (BEHAVIOR)component.GetComponentObject(behaviorType);

            if (bhv.IsInitialized)
            {
                return(bhv);
            }
            QuillInjector.GetInstance().Inject(bhv);
            return(bhv);
        }
Example #7
0
        /// <summary>
        /// 既定の設定で初期化
        /// </summary>
        public static void InitializeDefault()
        {
            Config           = null;
            Container        = new QuillContainer();
            TypeMap          = new TypeMapImpl();
            ComponentCreator = new ComponentCreators();
            Injector         = new QuillInjector();
            InjectionFilter  = new InjectionFilterBase();
            Message          = QuillMessage.CreateForJPN();
            OutputLog        = OutputLogToConsole;

            // SQL Server用パラメータマーク
            ReplaceToParamMark = (paramName) => "@" + paramName;
        }
        public void InjectTest()
        {
            // Arrange
            QuillInjector target = new QuillInjector();
            var           filter = (InjectionFilterBase)QM.InjectionFilter;

            filter.InjectionTargetTypes.Add(typeof(InjectionTargetSub));
            var actual = new InjectionTargetMain();

            // Act
            target.Inject(actual);

            // Assert
            Assert.IsNotNull(actual.Actual);
            Assert.IsNull(InjectionTargetMain.StaticActual, "デフォルトではstaticフィールドはインジェクション対象外");
        }
        public void Inject_NotTarget_Test()
        {
            QM.OutputLog(GetType(), EnumMsgCategory.INFO, "Test start.");

            // Arrange
            QuillInjector target = new QuillInjector();
            var           filter = (InjectionFilterBase)QM.InjectionFilter;

            filter.IsTargetTypeDefault = false;
            var actual = new InjectionTargetMain();

            // Act
            target.Inject(actual);

            // Assert
            Assert.IsNull(actual.Actual, "インジェクション対象外の想定");
        }
        public void DisposeTest()
        {
            // Arrange
            FieldInfo     targetField   = typeof(QuillInjector).GetField("_injectedTypes", BindingFlags.NonPublic | BindingFlags.Instance);
            QuillInjector target        = new QuillInjector();
            ISet <Type>   injectedTypes = targetField.GetValue(target) as ISet <Type>;

            Assert.IsNotNull(injectedTypes);
            injectedTypes.Add(typeof(int));
            injectedTypes.Add(typeof(string));

            // Act
            target.Dispose();

            // Assert
            Assert.AreEqual(0, injectedTypes.Count(), "クリアされている想定");
        }
        public void Inject_AlreadyInjected_Test()
        {
            // Arrange
            QuillInjector target = new QuillInjector();
            var           filter = (InjectionFilterBase)QM.InjectionFilter;

            filter.InjectionTargetTypes.Add(typeof(InjectionTargetSub));
            var actual = new InjectionTargetMain();

            // Act
            target.Inject(actual);
            var expected = actual.Actual;

            target.Inject(actual); // 二回実行

            // Assert
            Assert.IsNotNull(actual.Actual, "二回実行してもインジェクション結果は失われない想定");
            Assert.AreEqual(expected, actual.Actual, "二回実行してもインスタンスは変わらない想定");
        }
        public void Inject_Recursive_Test()
        {
            // Arrange
            QuillInjector target = new QuillInjector();
            var           filter = (InjectionFilterBase)QM.InjectionFilter;

            filter.InjectionTargetTypes.Add(typeof(InjectionRecursive));
            filter.InjectionTargetTypes.Add(typeof(InjectionTargetMain));
            filter.InjectionTargetTypes.Add(typeof(InjectionTargetSub));
            var actual = new InjectionRecursive();

            // Act
            target.Inject(actual);

            // Assert
            Assert.IsNotNull(actual.Actual);
            Assert.IsNotNull(actual.Actual.Actual);
            Assert.IsNotNull(actual.SameSourceType,
                             "フィールドにインジェクション対象と同じ型のものがあても無限ループにならず、かつインスタンスは設定されている想定");
            Assert.AreEqual(actual.SameSourceType, actual);
        }
 /// <summary>
 /// ループ処理実行
 /// </summary>
 /// <param name="target">インジェクション対象オブジェクト</param>
 /// <param name="context">インジェクション状態管理</param>
 /// <param name="fields">インジェクション先として抽出したフィールドのコレクション</param>
 /// <param name="callbackInjectField">フィールドへのインジェクション実行コールバック Action&lt;object, FieldInfo, QuillInjectionContext&gt;</param>
 public virtual void ForEach(object target, QuillInjectionContext context, IEnumerable<System.Reflection.FieldInfo> fields, 
     QuillInjector.CallbackInjectField callbackInjectField)
 {
     fields.AsParallel().ForAll(field => callbackInjectField(target, field, context));
 }
 /// <summary>
 /// ModelQuillInjectorクラスを初期化します。
 /// </summary>
 public ModelQuillInjector()
 {
     QuillInjector.GetInstance().Inject(this);
 }