public ViewObjectPool(ViewInstanceCreatorObjectPool pool, System.Type type)
            {
                Assert.IsNotNull(pool);
                Assert.IsTrue(type.ContainsInterface <IViewObject>());

                ParentPool = pool;
                ViewType   = type;
            }
예제 #2
0
        public object Deserialize(TextReader stream, System.Type type)
        {
            var keyTypeGetter = GetKeyTypeGetter(type);

            var(info, context) = CreateInfoAndContext(type);
            ReadTo(stream, info, keyTypeGetter);

            object inst = _instanceCreator?.Desirialize(type, info, context);

            if (inst != null)
            {
                return(inst);
            }
            else if (type.Equals(DEFAULT_TYPE))
            {
                var dict = new Dictionary <string, object>();
                foreach (var v in info.GetEnumerable())
                {
                    dict.Add(v.Name, v.Value);
                }
            }
            else if (type.ContainsInterface <ISerializable>())
            {
                var ctor = type.GetConstructor(new[] { typeof(SerializationInfo), typeof(StreamingContext) });
                Assert.IsNotNull(ctor, $"Not Define Constractor(SerializationInfo, StreamingContext)... type={type}");
                inst = ctor.Invoke(new object[] { info, context });
            }
            else if (type.GetCustomAttribute <System.SerializableAttribute>() != null ||
                     type.IsStruct())
            {
                //空引数のコンストラクを持つものだけ対応している
                var ctor = type.GetConstructor(new System.Type[] { });
                //var ctor = type.GetConstructor(null);
                Assert.IsNotNull(ctor, $"Not Define Default Constractor()... type={type}");
                Assert.AreEqual(0, ctor.GetParameters().Length, $"Not Define Default Constractor()... type={type} argsCount={ctor.GetParameters().Length}");

                inst = ctor.Invoke(new object[] { });
                foreach (var fieldInfo in inst.GetSerializedFieldEnumerable()
                         .Where(_i => info.GetEnumerable().Any(_e => _e.Name == _i.FieldInfo.Name)))
                {
                    //Debug.Log($"debug -- Desirialize -- {fieldInfo.FieldInfo.Name} type={fieldInfo.FieldInfo.FieldType}");
                    var value = info.GetValue(fieldInfo.FieldInfo.Name, fieldInfo.FieldInfo.FieldType);
                    fieldInfo.FieldInfo.SetValue(inst, value);
                }
            }
            else
            {
                Debug.LogWarning($"This type({type.FullName}) don't deserialize...");
            }
            return(inst);
        }
예제 #3
0
 public virtual bool IsVaildViewLayoutType(System.Type type)
 {
     return(type.ContainsInterface(ViewLayoutType));
 }
예제 #4
0
 /// <summary>
 /// 指定されたInterfaceを実装しているかどうか?
 /// <seealso cref="Hinode.Tests.CSharp.Extensions.TestTypeExtensions.ContainsInterfacePasses()"/>
 /// </summary>
 /// <param name="t"></param>
 /// <param name="interfaceType"></param>
 /// <returns></returns>
 public static bool ContainsInterface <InterfaceType>(this System.Type t)
 => t.ContainsInterface(typeof(InterfaceType));
예제 #5
0
 /// <summary>
 /// 同じまたは派生元の型かどうか?
 /// <seealso cref="Hinode.Tests.CSharp.Extensions.TestTypeExtensions.IsSameOrInheritedTypePasses()"/>
 /// </summary>
 /// <param name="t"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public static bool IsSameOrInheritedType(this System.Type t, System.Type type)
 => t.Equals(type) ||
 t.IsSubclassOf(type) ||
 t.ContainsInterface(type);