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)); }
// =============================================================================== // 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<object, FieldInfo, QuillInjectionContext></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); }
/// <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<object, FieldInfo, QuillInjectionContext></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); }