/// <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); } }
/// <summary> /// フィールド抽出 /// </summary> /// <param name="target">インジェクション対象オブジェクト</param> /// <param name="context">インジェクション状態管理</param> /// <returns>抽出したフィールドのコレクション</returns> public virtual IEnumerable<System.Reflection.FieldInfo> Select(object target, QuillInjectionContext context) { return target.GetType().GetFields(context.Condition); }
/// <summary> /// フィールド抽出 /// </summary> /// <param name="target">インジェクション対象オブジェクト</param> /// <param name="context">インジェクション状態管理</param> /// <returns>抽出したフィールドのコレクション</returns> public virtual IEnumerable<System.Reflection.FieldInfo> Select(object target, QuillInjectionContext context) { var fields = target.GetType().GetFields(context.Condition); return fields.Where(fi => fi.FieldType.IsImplementationAttrAttached()); }
/// <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> /// フィールドへのインジェクション実行 /// </summary> /// <param name="target">インジェクション対象のオブジェクト</param> /// <param name="fieldInfo">インジェクションするフィールド情報</param> /// <param name="context">インジェクション状態管理</param> public virtual void InjectField(object target, System.Reflection.FieldInfo fieldInfo, QuillInjectionContext context) { fieldInfo.SetValue(target, context.Container.GetComponent(fieldInfo.FieldType)); }